52 cout <<
"[1] Modular Arithmetic (Safe 64-bit)\n";
59 cout <<
"Safe multiplication avoiding 64-bit overflow:\n";
60 cout <<
" " << a <<
" * " << b <<
" mod " <<
m <<
"\n";
61 cout <<
" = " <<
mod_mul(a, b,
m) <<
"\n\n";
63 cout <<
"Extended Euclidean Algorithm:\n";
66 cout <<
" gcd(30, 20) = " << gcd <<
"\n";
67 cout <<
" Coefficients: x=" << x <<
", y=" <<
y <<
" (30*x + 20*y = " << (30*x + 20*
y) <<
")\n\n";
69 cout <<
"Chinese Remainder Theorem:\n";
72 cout <<
" x = 2 mod 3\n x = 3 mod 5\n x = 2 mod 7\n";
73 cout <<
" Solution: " <<
crt(
rem, mod) <<
" (mod " << (3*5*7) <<
")\n";
80 cout <<
"[2] Primality Testing & Factorization\n";
84 cout <<
"Miller-Rabin (deterministic for 64-bit):\n";
89 cout <<
"Pollard's Rho Factorization:\n";
90 cout <<
" Factoring " <<
composite <<
"...\n";
92 cout <<
" Prime factors: ";
93 for (
size_t i = 0; i <
factors.size(); ++i)
102 cout <<
"[3] Number Theoretic Transform (NTT)\n";
105 cout <<
"Polynomial Multiplication modulo 998244353:\n";
109 cout <<
" A(x) = 1 + 2x\n";
110 cout <<
" B(x) = 3 + 4x\n";
113 cout <<
" C(x) = A(x) * B(x) = ";
114 for (
size_t i = 0; i < C.size(); ++i)
116 if (i > 0) cout <<
" + ";
118 if (i > 0) cout <<
"x^" << i;
127 cout <<
"[4] Modular Combinatorics & Lucas Theorem\n";
132 cout <<
"O(1) Combinations (precomputed factorials):\n";
133 cout <<
" C(5, 2) mod " << mod <<
" = " <<
mc.nCk(5, 2) <<
"\n\n";
137 cout <<
"Lucas Theorem (large n, small prime):\n";
138 cout <<
" C(5, 2) mod " <<
small_mod <<
" = " <<
mc_lucas.lucas_nCk(5, 2) <<
"\n";
145 cout <<
"[5] Modular Linear Algebra (Gauss)\n";
155 cout <<
"Matrix A (mod " << p <<
"):\n";
156 for (
size_t i = 0; i < mat.
get().
size(); ++i)
157 cout <<
" [" << mat.
get()[i][0] <<
", " << mat.
get()[i][1] <<
"]\n";
159 cout <<
"Determinant |A| = " << mat.
determinant() <<
"\n";
164 cout <<
"Inverse A^-1 (mod " << p <<
"):\n";
166 cout <<
" [" <<
inv_opt->get()[i][0] <<
", " <<
inv_opt->get()[i][1] <<
"]\n";
170 cout <<
"Matrix is singular.\n";
173 cout <<
"\nSparse Matrix with DynMatrix (mod 7):\n";
180 cout <<
"Diagonal Matrix D:\n";
181 for (
size_t i = 0; i < 3; ++i)
182 cout <<
" [" <<
smat.get().read(i, 0) <<
", " <<
smat.get().read(i, 1) <<
", " <<
smat.get().read(i, 2) <<
"]\n";
183 cout <<
"Determinant |D| = " <<
smat.determinant() <<
"\n";
191 cout <<
"\n=== Mathematical & Number Theory Toolkit ===\n\n";
Simple dynamic array with automatic resizing and functional operations.
T & append(const T &data)
Append a copy of data
Dynamic matrix with sparse storage.
Combinatorics operations modulo a prime.
Matrix operations modulo a prime.
const MatrixT & get() const noexcept
Get a constant reference to the underlying matrix.
uint64_t determinant() const
Computes the determinant of the matrix modulo p.
std::optional< Modular_Matrix< MatrixT > > inverse() const
Computes the inverse of the matrix modulo p.
static Array< uint64_t > multiply(const Array< uint64_t > &a, const Array< uint64_t > &b)
Multiply two polynomials modulo MOD.
void demo_modular_linalg()
void demo_modular_arithmetic()
void demo_primality_factorization()
void demo_modular_combinatorics()
Safe modular arithmetic, extended Euclidean algorithm, and Chinese Remainder Theorem.
Modular combinatorics utilities.
Linear algebra operations over finite fields (modulo a prime).
Main namespace for Aleph-w library functions.
Array< uint64_t > pollard_rho(uint64_t n)
Compute the prime factorization of a number using Pollard's rho.
size_t size(Node *root) noexcept
Divide_Conquer_DP_Result< Cost > divide_and_conquer_partition_dp(const size_t groups, const size_t n, Transition_Cost_Fn transition_cost, const Cost inf=dp_optimization_detail::default_inf< Cost >())
Optimize partition DP using divide-and-conquer optimization.
bool miller_rabin(uint64_t n) noexcept
Miller-Rabin primality test for 64-bit integers.
uint64_t mod_mul(uint64_t a, uint64_t b, uint64_t m)
Safe 64-bit modular multiplication.
void print_rule()
Prints a horizontal rule for example output separation.
uint64_t crt(const Array< uint64_t > &rem, const Array< uint64_t > &mod)
Chinese Remainder Theorem (CRT).
Industrial-grade Number Theoretic Transform core for modular polynomial multiplication.
Integer factorization using Pollard's rho algorithm.
Advanced primality testing algorithms.
FooMap m(5, fst_unit_pair_hash, snd_unit_pair_hash)