数论学习笔记
整除性
d e f 0 d e f 0 :a a 整除b b 指,若a , b a , b 为整数且a ≠ 0 a ≠ 0 存在整数c c 使得b = a c b = a c 。称a a 是b b 的因子,b b 是a a 的倍数 记作a | b a | b 。如13 | 182 , − 5 | 10... 13 | 182 , − 5 | 10...
对于a , b , c ∈ Z a , b , c ∈ Z 有以下几个结论
若b | a , c | b b | a , c | b 则 c | a c | a
若b | a ⟺ c b | c a b | a ⟺ c b | c a
若c | a , c | b c | a , c | b 对于m , n ∈ Z m , n ∈ Z 有 c | m a + m b c | m a + m b
d e f 1 d e f 1 [带余除法]:a , b ∈ Z a , b ∈ Z ,其中b > 0 b > 0 则存在连个唯一的整数q , r q , r
a = b q + r 0 ≤ r < b ( 1 ) a = b q + r 0 ≤ r < b ( 1 )
d e f 2 d e f 2 :把(1)式中的的q叫做不完全商,将r叫做非负最小剩余,记作⟨ a ⟩ b = r ⟨ a ⟩ b = r 其中b通常省略不写.有
⟨ a ± b ⟩ = ⟨ ⟨ a ⟩ ± ⟨ b ⟩ ⟩ ⟨ a ± b ⟩ = ⟨ ⟨ a ⟩ ± ⟨ b ⟩ ⟩
⟨ a × b ⟩ = ⟨ ⟨ a ⟩ × ⟨ b ⟩ ⟩ ⟨ a × b ⟩ = ⟨ ⟨ a ⟩ × ⟨ b ⟩ ⟩
此部分应用见数论分块
最大公因数数和最小公倍数
辗转相除法和最大共因数
d e f 0 d e f 0 :定义啊( a , b ) ( a , b ) 为a , b a , b 的最大共因数,[ a , b ] [ a , b ] 为a , b a , b 的最小公倍数,[ a , b ] = a b ( a , b ) [ a , b ] = a b ( a , b ) .
d e f 1 d e f 1 :辗转相除法a , b , c ∈ Z a , b , c ∈ Z 且皆不为0有 a = b q + c , q ∈ Z a = b q + c , q ∈ Z ,则( a , b ) = ( b , c ) ( a , b ) = ( b , c ) 计算机类通常用递归实现
a , b > 0 a , b > 0 则( a , b ) ( a , b ) 就是辗转相除法的最后的一个余数写作( a , b ) = r ( a , b ) = r
给定两整数a , b , > 0 a , b , > 0 ,则存在两整数使得( a , b ) = m a + n b ( a , b ) = m a + n b
若a | b c , ( a , b ) = 1 a | b c , ( a , b ) = 1 则a | c a | c
设 a 1 , a 2 , . . a n , n > 2 a 1 , a 2 , . . a n , n > 2 则存在d n = ( a 1 , a 2 , . . a n ) d n = ( a 1 , a 2 , . . a n ) 为序列最大的共因数
设 a 1 , a 2 , . . a n , n > 2 a 1 , a 2 , . . a n , n > 2 则存在x 1 , x 2 . . x n x 1 , x 2 . . x n 使得( a 1 , a 2 , . . a n ) = a 1 x 1 + . . . a n x n ( a 1 , a 2 , . . a n ) = a 1 x 1 + . . . a n x n
对于最大共因数可用math库中的 __gcd
函数实现 ,最小公倍数根据定义为a b / g c d ( a , b ) a b / g c d ( a , b )
素数整数唯一分解定理
当 p 为素数时 ,a ∈ Z a ∈ Z :有几个引理
a ∈ Z a ∈ Z q为a的最小正因数 q ≤ √ a q ≤ a
p | a p | a 或( p , a ) = 1 ( p , a ) = 1
p | a b p | a b ,则p | a p | a 或p | b p | b
∀ b > 1. b ∈ Z ∀ b > 1. b ∈ Z ,p p 是p p 的一素因子, p p 必然出现在b b 分解素数乘积分式中
d e f 0 d e f 0 [整数唯一分解定理]对于a ∈ Z a ∈ Z 有
a = q 1 q 2 . . q n q 1 ≤ q 2 . . ≤ q 3 a = q 1 q 2 . . q n q 1 ≤ q 2 . . ≤ q 3
d e f 1 d e f 1 :素数是无限多个
d e f 2 d e f 2 :存在无数个形如4 n − 1 4 n − 1 的素数
d e f 3 d e f 3 :对于x 0 ∈ Z x 0 ∈ Z 不存在多项式f ( x ) = a n x n + a n − 1 x n − 1 + . . a 1 x + a 0 f ( x ) = a n x n + a n − 1 x n − 1 + . . a 1 x + a 0 使得所有≤ x 0 ≤ x 0 的整数时都成立
根据引理1,可以通过试除法来判断一个数是否为素数,时间复杂度为O ( √ n ) O ( n )
bool is_prime (int n) {
if (n < 2 ) return false ;
for (int i = 2 ; i <= sqrt (n); i++)
if (n % i == 0 ) return false ;
return true ;
}
当一次性对1 − n 1 − n 之间数进行素性判断时,其复杂度就会到达O ( n √ n ) O ( n n ) 于是可以通过两种算法来实现快速筛选素数分别是Eratosthenes筛法O ( n log n log n ) O ( n log n log n ) 与线性筛O ( n ) O ( n ) ,前者可以通过bitset
或分块进一步优化,后者则不仅可以求素数也可以求任何积性函数,因为频繁访问数组后者使用bitset
则会使性能下降.
void get_primes (int n)
{
for (int i = 2 ; i <= n; i ++ )
{
if (st[i]) continue ;
primes[cnt ++ ] = i;
for (int j = i + i; j <= n; j += i)
st[j] = true ;
}
}
void get_primes (int n)
{
for (int i = 2 ; i <= n; i ++ )
{
if (!st[i]) primes[cnt ++ ] = i;
for (int j = 0 ; primes[j] <= n / i; j ++ )
{
st[primes[j] * i] = true ;
if (i % primes[j] == 0 ) break ;
}
}
}
算法
时间
空间
朴素算法
302ms
808kb
埃式筛
20ms
1372kb
线性筛
20ms
680 kb
bitset优化埃式筛
20ms
808kb
bitset优化线性筛
20ms
764kb
试除法分解质因数,复杂度为O ( √ n ) O ( n )
void divide (int n) {
m = 0 ;
for (int i = 2 ; i*i <= n; i++) {
if (n % i == 0 ) {
p[++m] = i, c[m] = 0 ;
while (n % i == 0 ) n /= i, c[m]++;
}
}
if (n > 1 )
p[++m] = n, c[m] = 1 ;
for (int i = 1 ; i <= m; i++)
cout << p[i] << '^' << c[i] <<endl;
}
费马数和梅森素数数
梅森素数
d e f 0 d e f 0 : p p 属于素数,形如2 p − 1 2 p − 1 的素数叫梅森素数,记作M p = 2 p − 1 M p = 2 p − 1
d e f 2 d e f 2 : p p 是一个奇素数,q q 是M − P M − P 的一个素因子,则q q 形如q = 2 k p + 1 q = 2 k p + 1
引理:a > 0 , b > 0 , S > 0 则 ( S a − 1 , S b − 1 ) = S ( a , b ) − 1 a > 0 , b > 0 , S > 0 则 ( S a − 1 , S b − 1 ) = S ( a , b ) − 1
费马数
d e f 0 d e f 0 :形如T n = 2 2 n + 1 , n > 0 T n = 2 2 n + 1 , n > 0 的数叫费马数
d e f 1 d e f 1 :F m , F n , m ≠ m F m , F n , m ≠ m 有( F m , F n ) = 1 ( F m , F n ) = 1
完全数
d e f 0 d e f 0 n ∈ Z n ∈ Z ,n n 的全部因数之和为2 n 2 n 则称n n 为完全数
d e f 1 d e f 1 n = p a 1 1 . . . p a k k n = p 1 a 1 . . . p k a k 是n n 的标准分解式则,σ ( n ) = ∑ d | n d σ ( n ) = ∑ d | n d 表示n的诸因子之和有
σ ( n ) = p a 1 + 1 1 p 1 − 1 . . . p a k + 1 k p k − 1 σ ( n ) = p 1 a 1 + 1 p 1 − 1 . . . p k a k + 1 p k − 1
d e f 2 d e f 2 n 是一个偶完全数的充分必要条件是n n 具有形如2 p − 1 ( 2 p − 1 ) 2 p − 1 ( 2 p − 1 ) 的因子,其中p p 和2 p − 1 2 p − 1 均为素数
d e f 3 d e f 3 n 是一个奇完全数,则n n 有分解式n = p a q b 1 . . . q b t n = p a q b 1 . . . q b t ,a , p a , p 都是形如4 n − 1 4 n − 1 的素数
一次不等式
d e f 0 d e f 0 :二次不等式 指的式形如 ( 1 ) a 1 x + a 2 y = n ( 1 ) a 1 x + a 2 y = n 其中a 1 , a 2 , n a 1 , a 2 , n 均为给定的整数
d e f 1 d e f 1 :a 1 x + a 2 y = n a 1 x + a 2 y = n 有解的充分必要条件是( a 1 x , a 2 y ) | n ( a 1 x , a 2 y ) | n
d e f 2 d e f 2 :( a 1 , a 2 ) = 1 ( a 1 , a 2 ) = 1 则(1)的全部解可表示为x = x 0 + a 2 t , y = y 0 − t x = x 0 + a 2 t , y = y 0 − t ,其中x 0 , y 0 x 0 , y 0 为(1)的一组解,t为任意整数
d e f 3 d e f 3 :s ≥ 2 s ≥ 2 ,s s 元一次不等式a 1 x 1 + a 2 x 2 + . . + a s x s = n a 1 x 1 + a 2 x 2 + . . + a s x s = n 有解的充分必要条件是( a 1 , . . , a s ) | n ( a 1 , . . , a s ) | n
通过扩展欧几里得算法O ( log b ) O ( log b ) ,可以解决二次不等式的问题
int exgcd (int a, int b, int &x, int &y)
{
if (!b)
{
x = 1 , y = 0 ;
return a;
}
int d = exgcd (b, a % b, y, x);
y -= a / b * x;
return d;
}
同余
同余的定义及其性质
d e f 0 d e f 0 : m a , b , ∈ Z m a , b , ∈ Z 且 m m 除 a , b a , b 所得的余数相同那么我们说a , b a , b 对模数m m 同余 记作 a ≡ b ( mod n ) a ≡ b ( mod n ) ,不同余记作 a ≢ b ( mod n ) a ≢ b ( mod n )
同余的一些性质
a ≡ a ( mod m ) a ≡ a ( mod m ) (自反性)
a ≡ b ( mod m ) a ≡ b ( mod m ) 则 b ≡ a ( mod m ) b ≡ a ( mod m ) (对称性)
a ≡ b ( mod m ) a ≡ b ( mod m ) ,b ≡ c ( mod m ) b ≡ c ( mod m ) 则 a ≡ c ( mod m ) a ≡ c ( mod m ) (传递性)
d e f 0 d e f 0 a , b a , b 对于m m 同余的充分必要条件是m | a − b m | a − b
d e f 1 d e f 1 a ≡ b ( mod m ) α ≡ β ( mod m ) a ≡ b ( mod m ) α ≡ β ( mod m ) 那么有
a x + α y = b x + β y ( mod m ) a x + α y = b x + β y ( mod m )
a α ≡ b β ( mod m ) a α ≡ b β ( mod m )
a n ≡ b n ( mod m ) , n > 0 a n ≡ b n ( mod m ) , n > 0
f ( x ) ≡ f ( b ) f ( x ) ≡ f ( b ) 其中 f ( x ) f ( x ) 为任意给定的一个整系数多项式
d e f 2 d e f 2 :若 a c ≡ b c ( mod m ) a c ≡ b c ( mod m ) 且若 ( m , c ) = d ( m , c ) = d 则a ≡ b ( mod ) m d a ≡ b ( mod ) m d
剩余系和完全剩余系
剩余系
d e f 0 d e f 0 :m ∈ Z + m ∈ Z + ,C r ( r = 0 , 1 , . . . m − 1 ) C r ( r = 0 , 1 , . . . m − 1 ) 表示所有形如q m + r q m + r 的整数构成的集合其中q = 0 , ± 1 , ± 2 . . q = 0 , ± 1 , ± 2 . . 则 C 0 . . . C m − 1 C 0 . . . C m − 1 叫做模数m m 的剩余系
设m > 0 , C 0 , C 1 . . . C m − 1 m > 0 , C 0 , C 1 . . . C m − 1 是模数m m 的剩余系,则有
每一个整数恰好包含在某一个类C j C j 里, 这里 0 ≤ j ≤ m − 1 0 ≤ j ≤ m − 1
x , y x , y 属于同一类的充分必要条件是x ≡ y ( mod m ) x ≡ y ( mod m )
完全剩余系
d e f 0 d e f 0 :在模数m m 的剩余系C 0 , C 1 . . C m − 1 C 0 , C 1 . . C m − 1 中各取一个数a ∈ C j a ∈ C j j = 0 , 1.. m − 1 j = 0 , 1.. m − 1 此m m 个数a 0 , a 1 . . a m − 1 a 0 , a 1 . . a m − 1 称为为m m 的完全剩余系 .
d e f 1 d e f 1 :由上可知m m 个整数构成m m 的完全剩余系的充分必要条件是两两不同余
最常用的完全剩余系的是0 , 1 , 2.. , m − 1 0 , 1 , 2.. , m − 1 ,他们被称为模m m 的非负最小剩余系
d e f 2 d e f 2 :( k , a ) = 1 ( k , a ) = 1 而 a , a 2 , . . a m a , a 2 , . . a m 是模数m m 的一组完全剩余系,则k a , k a 2 . . k a m k a , k a 2 . . k a m 构成m m 的完全剩余系
d e f 3 d e f 3 :设m 1 , m 2 > 0 , ( m 1 , m 2 ) = 1 m 1 , m 2 > 0 , ( m 1 , m 2 ) = 1 ,而x 1 , x 2 x 1 , x 2 分别通过m 1 , m 2 m 1 , m 2 的完全剩余系,则$
d e f 4 d e f 4 Wilson定理 :p p 是一个素数 ,( p − 1 ) ! + 1 ≡ ( mod p ) ( p − 1 ) ! + 1 ≡ ( mod p )
缩系
d e f 0 d e f 0 :m ∈ Z m ∈ Z 在与m m 互素的剩余系中个取一个数组成的集合叫模数m m 的缩系
欧拉函数
d e f 0 d e f 0 :定义欧拉函数 φ ( n ) φ ( n ) 是一个定义在正整数集合上的函数φ ( n ) φ ( n ) 的指的是序列[ 0 , 1 , 2.. n − 1 ] [ 0 , 1 , 2.. n − 1 ] 中与n n 互素的个数,显然当n n 为素数时φ ( n ) = n − 1 φ ( n ) = n − 1
d e f 1 d e f 1 :模数m m 的一组缩系中含有φ ( m ) φ ( m ) 个数
d e f 2 d e f 2 : 若有a 1 , . . a φ ( m ) a 1 , . . a φ ( m ) 个整数与m m 互素,则a 1 , . . a φ ( m ) a 1 , . . a φ ( m ) 形成模m m 的缩系的充分必要条件是两两对模m m 不同余
d e f 3 d e f 3 :( a , m ) = 1 , x ( a , m ) = 1 , x 通过模数m m 的缩系,则a x a x 也通过模数m m 的一组缩系.
d e f 4 d e f 4 :欧拉定理 :m > 1 , ( a , m ) = 1 m > 1 , ( a , m ) = 1 则a φ ( m ) ≡ 1 ( mod m ) a φ ( m ) ≡ 1 ( mod m )
d e f 5 d e f 5 :费马小定理 :p p 为素数 ,则a p ≡ a ( mod p ) a p ≡ a ( mod p ) 也可写作a p − 1 ≡ 1 ( mod p ) a p − 1 ≡ 1 ( mod p )
一次同余式
d e f 0 d e f 0 f ( x ) = a n x n + a n − 1 x n − 1 + . . . + a 1 x + a 0 : ( 1 ) , ( n > 0 ) , i = 0 , . . . n f ( x ) = a n x n + a n − 1 x n − 1 + . . . + a 1 x + a 0 : ( 1 ) , ( n > 0 ) , i = 0 , . . . n 有f ( x ) ≡ 0 ( mod m ) , m > 0 f ( x ) ≡ 0 ( mod m ) , m > 0 叫做模数m m 的同余式 ,若a n ≢ 0 ( mod m ) a n ≢ 0 ( mod m ) 则n n 叫做 ( 1 ) ( 1 ) 的次数满足f ( x 0 ) ≡ 0 ( mod m ) f ( x 0 ) ≡ 0 ( mod m ) 则x 0 ≡ x ( mod m ) x 0 ≡ x ( mod m ) 叫做同余式的解,不同的解是值互不同余的解
四个重要定理
设( a , m ) = 1 , m > 0 ( a , m ) = 1 , m > 0 则同余式a x ≡ b ( mod m ) a x ≡ b ( mod m ) 恰好有一个解.
在1的条件下x ≡ b a φ ( m ) − 1 ( mod m ) x ≡ b a φ ( m ) − 1 ( mod m ) 是唯一解
设( a , m ) = d , m > 0 ( a , m ) = d , m > 0 同余式a x ≡ b ( mod m ) a x ≡ b ( mod m ) 有解的充分必要条件是:d | b d | b
设( a , m ) = d , m > 0 , d | b ( a , m ) = d , m > 0 , d | b 同余式a x ≡ b ( mod m ) a x ≡ b ( mod m ) 有d d 个解
d e f 1 d e f 1 :f ( x ) = a n x n + a n − 1 x n − 1 + . . . + a 1 x + a 0 : ( 1 ) , ( n > 0 ) , i = 0 , . . . n f ( x ) = a n x n + a n − 1 x n − 1 + . . . + a 1 x + a 0 : ( 1 ) , ( n > 0 ) , i = 0 , . . . n 有解的充分必要条件是满足( a 1 , a 2 . . . a n ) | a 0 ( a 1 , a 2 . . . a n ) | a 0 ,若有解则解的个数是m a 0 − 2 ( a 1 , a 2 . . . a n ) m a 0 − 2 ( a 1 , a 2 . . . a n )
乘法逆元
对于一个线性同余方程a x ≡ 1 ( mod b ) a x ≡ 1 ( mod b ) ,我们称x x 为 a mod b a mod b 的逆元,记作a − 1 a − 1
通过快速幂或者扩欧来求解,快速幂利用了费马小定理因此要求b b 为素数,而扩展欧几里得算法仅要求gcd ( a , b ) = 1 gcd ( a , b ) = 1
long long binpow (long long a, long long b) {
long long res = 1 ;
while (b > 0 ) {
if (b & 1 ) res = res * a;
a = a * a;
b >>= 1 ;
}
return res;
}
模数是素数的同余式
d e f 0 d e f 0 :Lagrange 定理:p p 是素数f ( x ) = a n x n + a n − 1 x n − 1 + . . . + a 1 x + a 0 f ( x ) = a n x n + a n − 1 x n − 1 + . . . + a 1 x + a 0 ( n > 0 ) , a n ≢ 0 ( mod p ) ( n > 0 ) , a n ≢ 0 ( mod p ) 则同余式f ( x ) ≡ 0 ( mod p ) f ( x ) ≡ 0 ( mod p ) 最多有n n 个解
推论: p p 是素数 f ( x ) = a n x n + a n − 1 x n − 1 + . . . + a 1 x + a 0 ≡ 0 ( mod p ) f ( x ) = a n x n + a n − 1 x n − 1 + . . . + a 1 x + a 0 ≡ 0 ( mod p )
的解的个数大于n n 则p | a i ( i = 0... n ) p | a i ( i = 0... n )
d e f 1 d e f 1 :W o l s t e n h o l m e W o l s t e n h o l m e 定理设p > 3 p > 3 且q q 为素数有
p − 1 ∑ k = 1 ( p − 1 ) ! k ≡ 0 ( mod p ) 3 ∑ k = 1 p − 1 ( p − 1 ) ! k ≡ 0 ( mod p ) 3
孙子定理
⎧ ⎪
⎪
⎪
⎪ ⎨ ⎪
⎪
⎪
⎪ ⎩ x ≡ b 1 ( mod m 1 ) x ≡ b 2 ( mod m 2 ) . . . x ≡ b n ( mod m n ) { x ≡ b 1 ( mod m 1 ) x ≡ b 2 ( mod m 2 ) . . . x ≡ b n ( mod m n )
被称为一次同余方程组,孙子算法可以系统化的解决此类问题,孙子算法推广为孙子定理也称中国剩余定理.
d e f 0 d e f 0 :设m 0 , m 1 . . . m n − 1 m 0 , m 1 . . . m n − 1 为n n 个两两互素的数那么,有模M = m 1 m 2 . . m n M = m 1 m 2 . . m n 的唯一解
x ≡ M 1 M ′ 1 b 1 + M 2 M ′ 2 b 2 . . . + M n M ′ n b n x ≡ M 1 M 1 ′ b 1 + M 2 M 2 ′ b 2 . . . + M n M n ′ b n
其中有M ′ i M i ≡ 1 ( mod m i ) , i = 1 , . . . , k M i ′ M i ≡ 1 ( mod m i ) , i = 1 , . . . , k
d e f 1 d e f 1 :m 1 , m 2 . . . m k m 1 , m 2 . . . m k 是k k 个两两互素的正整数数,M = m 1 m 2 . . m n M = m 1 m 2 . . m n 那么有解的充分必要条件是f ( x ) ≡ 0 ( mod m ) i ( i = 1 , . . , k ) f ( x ) ≡ 0 ( mod m ) i ( i = 1 , . . , k )
LL CRT (int k, LL* a, LL* r) {
LL n = 1 , ans = 0 ;
for (int i = 1 ; i <= k; i++) n = n * r[i];
for (int i = 1 ; i <= k; i++) {
LL m = n / r[i], b, y;
exgcd (m, r[i], b, y);
ans = (ans + a[i] * m * b % n) % n;
}
return (ans % n + n) % n;
}
模数是素数幂的同余式
f ( x ) = a n x n + . . + a 1 x + a 0 ( mod p a ) , n > 0 , p a / | a n f ( x ) = a n x n + . . + a 1 x + a 0 ( mod p a ) , n > 0 , p a ⧸ | a n
对于上式显然有;f ( x ) ≡ ( mod p ) f ( x ) ≡ ( mod p )
d e f 1 d e f 1 :设x ≡ x i ( mod p ) x ≡ x i ( mod p )
参考
《具体数学》
OIwiki
《初等数论讲义》
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!