数论基础
费马小定理
若p p 为质数,gcd ( a , p ) = 1 gcd ( a , p ) = 1 ,则a p − 1 ≡ 1 ( mod p ) a p − 1 ≡ 1 ( mod p )
另一形式:对于任意整数a a ,都有a p ≡ a ( mod p ) a p ≡ a ( mod p )
证明
构造一个序列A = { 0 , 1 , 2 , 3 , … … , p − 1 } A = { 0 , 1 , 2 , 3 , … … , p − 1 } ,已知A A 为p p 的完全剩余系
取一个不为p p 倍数的数a a ,则a a 与序列A A 中的数一一相乘得到的序列B B 也是p p 的完全剩余系
解释:反证法,假设序列B B 不是p p 的完全剩余系,即存在A i a ≡ A j a ( mod p ) ( A i > A j ) A i a ≡ A j a ( mod p ) ( A i > A j )
∴ ( A i − A j ) a ≡ 0 ( mod p ) ⇒ p | ( A i − A j ) a ∴ ( A i − A j ) a ≡ 0 ( mod p ) ⇒ p | ( A i − A j ) a
∵ gcd ( a , p ) = 1 , A i − A j ∈ [ 1 , p − 1 ] ∵ gcd ( a , p ) = 1 , A i − A j ∈ [ 1 , p − 1 ]
故不存在p | ( A i − A j ) a p | ( A i − A j ) a
综上,每个A i a ( mod p ) A i a ( mod p ) 都对应一个A j ( mod p ) A j ( mod p ) ,p p 个元素组成了完全剩余系
显然0 ⋅ a 0 · a 对应0 0
设f = ( p − 1 ) ! f = ( p − 1 ) ! ,则a p − 1 f ≡ f ( mod p ) ⇒ a p − 1 ≡ 1 ( mod p ) a p − 1 f ≡ f ( mod p ) ⇒ a p − 1 ≡ 1 ( mod p )
得证
关于另一形式:
对于不是p p 的倍数a a ,可由a p − 1 ≡ 1 ( mod p ) a p − 1 ≡ 1 ( mod p ) ,得到a p ≡ a ( mod p ) a p ≡ a ( mod p )
对于是p p 的倍数a a ,a mod p = 0 , a p mod p = 0 ⇒ a p ≡ a ( mod p ) a mod p = 0 , a p mod p = 0 ⇒ a p ≡ a ( mod p )
故另一形式对任意整数a a 都通用
素数
素数计数函数:π ( x ) lim x → ∞ = x ln ( x ) π ( x ) lim x → ∞ = x ln ( x )
素数筛
void prime (int n) {
p[1 ]=1 ;
for (int i=2 ;i*i<=n;i++){
if (p[i]) continue ;
for (int j=i*i;j<=n;j+=i) p[j]=1 ;
}
}
void prime (int n) {
for (int i=2 ;i<=n;i++){
if (!v[i]) p[cut++]=i;
for (int j=0 ;p[j]<=n/i;j++){
v[p[j]*i]=1 ;
if (i%p[j]==0 ) break ;
}
}
}
素数判断
bool isPrime (int num) {
if (num==1 ) return 0 ;
if (num==2 ||num==3 ) return 1 ;
if (num%6 !=1 &&num%6 !=5 ) return 0 ;
int tmp=sqrt (num);
for (int i=5 ;i<=tmp;i+=6 )
if (num%i==0 ||num%(i+2 )==0 )
return 0 ;
return 1 ;
}
解释:所有大于3的素数都可以表示为6 n ± 1 6 n ± 1 的形式
素性判断
ll qpow (ll a,ll b,ll c) {
ll ans=1 ;
while (b){
if (b&1 ) ans=(ans*a)% c;
a=(a*a)%c;
b>>=1 ;
}
return ans;
}
bool millerRabin (ll n) {
if (n<3 ||n%2 ==0 ) return n==2 ;
ll a=n-1 ,b=0 ;
while (a%2 ==0 ) a/=2 ,++b;
for (int i=1 ,j;i<=10 ;++i) {
ll x=rand ()%(n-2 )+2 ,v=qpow (x,a,n);
if (v==1 ) continue ;
for (j=0 ;j<b;++j) {
if (v==n-1 ) break ;
v=v*v%n;
}
if (j>=b) return 0 ;
}
return 1 ;
}
解释:
实质还是依赖费马小定理逆推做素数判断测试(事实上逆推是不成立的,所以只是概率性测试)
比起费马测试,将a n − 1 ≡ 1 ( mod n ) a n − 1 ≡ 1 ( mod n ) 的n − 1 n − 1 开方进行了优化
优化依据:对于素数∀ p ( p ≠ 2 ) ∀ p ( p ≠ 2 ) ,如果a 2 ≡ 1 ( mod n ) a 2 ≡ 1 ( mod n ) ,则a = 1 a = 1 或者a = n − 1 a = n − 1 (二次剩余)
欧拉函数
ϕ ( n ) ϕ ( n ) 表示在[ 1 , n ] [ 1 , n ] 的范围内与n n 互质的数有几个
基础公式
ϕ ( 1 ) = 1 ϕ ( 1 ) = 1
如果n n 为质数,则ϕ ( n ) = n − 1 ϕ ( n ) = n − 1
如果n n 为某质数的次方,则ϕ ( p k ) = p k − p k − 1 ϕ ( p k ) = p k − p k − 1
对于任意n n ,ϕ ( n ) = n ∏ s i = 1 ( 1 − 1 p i ) ϕ ( n ) = n ∏ i = 1 s ( 1 − 1 p i ) ,s s 为n n 的质因子个数
关于最后一项证明:
设n = p m n = p m ,p p 为数
则1 1 到n n 可以被分成p p 份,[ 1 , m ] , [ m + 1 , 2 m ] , … … , [ ( p − 1 ) m + 1 , p m ] [ 1 , m ] , [ m + 1 , 2 m ] , … … , [ ( p − 1 ) m + 1 , p m ]
由欧几里得公式gcd ( a , b ) = gcd ( a % b , b ) gcd ( a , b ) = gcd ( a % b , b ) 倒推,得gcd ( a , b ) = gcd ( a + x b , b ) gcd ( a , b ) = gcd ( a + x b , b )
故每份之中,与m m 互质数量相同
设gcd ( b , m ) = 1 gcd ( b , m ) = 1
当p | m p | m 时,gcd ( b , p ) = 1 gcd ( b , p ) = 1 ,故ϕ ( n ) = p ϕ ( m ) ϕ ( n ) = p ϕ ( m )
当p ∤ m p ∤ m 时,gcd ( b , p ) gcd ( b , p ) 不一定为1,则ϕ ( n ) = p ϕ ( m ) − { 与 m 互 质 , 与 p 不 互 质 的 数 的 个 数 } ϕ ( n ) = p ϕ ( m ) − { 与 m 互 质 , 与 p 不 互 质 的 数 的 个 数 }
已知与p p 不互质的数有,p , 2 p , 3 p , … … , m p p , 2 p , 3 p , … … , m p
参照费马小定理的证明过程,已知这些数构成m m 的完全剩余系,相当于之前p p 份中的一份,其中与m m 互质的数有ϕ ( m ) ϕ ( m ) 个
故ϕ ( n ) = ϕ ( m ) ( p − 1 ) ϕ ( n ) = ϕ ( m ) ( p − 1 )
递推得ϕ ( n ) = ∏ s i = 1 ( p k i − p k − 1 i ) = n ∏ s i = 1 ( 1 − 1 p i ) ϕ ( n ) = ∏ i = 1 s ( p i k − p i k − 1 ) = n ∏ i = 1 s ( 1 − 1 p i )
函数性质
欧拉函数为积性函数,gcd ( a , b ) = 1 ⇒ ϕ ( a b ) = ϕ ( a ) ϕ ( b ) gcd ( a , b ) = 1 ⇒ ϕ ( a b ) = ϕ ( a ) ϕ ( b ) ,由于ϕ ( 2 ) = 1 ϕ ( 2 ) = 1 ,当n n 为奇数时,有ϕ ( 2 n ) = ϕ ( n ) ϕ ( 2 n ) = ϕ ( n )
由公式可推导出,故不再证明
证明:
n = ∑ n i = 1 f ( i ) n = ∑ i = 1 n f ( i ) ,f ( i ) f ( i ) 表示gcd ( k , n ) = i ( k ∈ [ 1 , n ] ) gcd ( k , n ) = i ( k ∈ [ 1 , n ] ) 的k k 的个数
显然i i 只会是n n 的因数,故n = ∑ d | n f ( d ) n = ∑ d | n f ( d )
∵ gcd ( k , n ) = d ⇒ gcd ( k d , n d ) = 1 ∵ gcd ( k , n ) = d ⇒ gcd ( k d , n d ) = 1
∴ f ( d ) = ϕ ( n d ) ∴ f ( d ) = ϕ ( n d )
根据约数性质:当d d 遍历n n 的全体约数时,n d n d 也遍历n n 的全体约数
故n = ∑ d | n ϕ ( n d ) = ∑ d | n ϕ ( d ) n = ∑ d | n ϕ ( n d ) = ∑ d | n ϕ ( d )
当gcd ( a , b ) = d gcd ( a , b ) = d 时,ϕ ( a b ) = ϕ ( a ) ϕ ( b ) d ϕ ( d ) ϕ ( a b ) = ϕ ( a ) ϕ ( b ) d ϕ ( d )
证明:
设d = p k i i p k i + 1 i + 1 … p k j j d = p i k i p i + 1 k i + 1 … p j k j
a = p m i i p m i + 1 i + 1 … p m j j ∗ A a = p i m i p i + 1 m i + 1 … p j m j ∗ A
b = p n i i p n i + 1 i + 1 … p n j j ∗ B b = p i n i p i + 1 n i + 1 … p j n j ∗ B
【注:gcd ( a , b ) = d ⇒ k i = m i n ( m i , n i ) gcd ( a , b ) = d ⇒ k i = m i n ( m i , n i ) 】
a b = p m i i p n i i p m i + 1 i + 1 p n i + 1 i + 1 … p m j j p n j j ∗ A ∗ B a b = p i m i p i n i p i + 1 m i + 1 p i + 1 n i + 1 … p j m j p j n j ∗ A ∗ B
A , B A , B 为去掉与d d 相同的素因子后剩下的素因子次方
ϕ ( d ) = p k i i p k i + 1 i + 1 … p k j j ( 1 − p − 1 i ) ( 1 − p − 1 i + 1 ) … ( 1 − p − 1 j ) ϕ ( d ) = p i k i p i + 1 k i + 1 … p j k j ( 1 − p i − 1 ) ( 1 − p i + 1 − 1 ) … ( 1 − p j − 1 )
ϕ ( a ) = p m i i p m i + 1 i + 1 … p m j j ( 1 − p − 1 i ) ( 1 − p − 1 i + 1 ) … ( 1 − p − 1 j ) ∗ ϕ ( A ) ϕ ( a ) = p i m i p i + 1 m i + 1 … p j m j ( 1 − p i − 1 ) ( 1 − p i + 1 − 1 ) … ( 1 − p j − 1 ) ∗ ϕ ( A )
ϕ ( b ) = p n i i p n i + 1 i + 1 … p n j j ( 1 − p − 1 i ) ( 1 − p − 1 i + 1 ) … ( 1 − p − 1 j ) ∗ ϕ ( B ) ϕ ( b ) = p i n i p i + 1 n i + 1 … p j n j ( 1 − p i − 1 ) ( 1 − p i + 1 − 1 ) … ( 1 − p j − 1 ) ∗ ϕ ( B )
ϕ ( a b ) = p m i i p n i i p m i + 1 i + 1 p n i + 1 i + 1 … p m j j p n j j ( 1 − p − 1 i ) ( 1 − p − 1 i + 1 ) … ( 1 − p − 1 j ) ∗ ϕ ( A ) ∗ ϕ ( B ) ϕ ( a b ) = p i m i p i n i p i + 1 m i + 1 p i + 1 n i + 1 … p j m j p j n j ( 1 − p i − 1 ) ( 1 − p i + 1 − 1 ) … ( 1 − p j − 1 ) ∗ ϕ ( A ) ∗ ϕ ( B )
∴ ( 1 − p − 1 i ) ( 1 − p − 1 i + 1 ) … ( 1 − p − 1 j ) = ϕ ( d ) d ∴ ( 1 − p i − 1 ) ( 1 − p i + 1 − 1 ) … ( 1 − p j − 1 ) = ϕ ( d ) d
故ϕ ( a b ) = ϕ ( a ) ϕ ( b ) d ϕ ( d ) ϕ ( a b ) = ϕ ( a ) ϕ ( b ) d ϕ ( d )
在int范围内,ϕ m a x = 1600 ϕ m a x = 1600
代码
int phi (int n) {
int ans = n;
for (int i = 2 ; i * i <= n; i++)
if (n % i == 0 ) {
ans = ans / i * (i - 1 );
while (n % i == 0 ) n /= i;
}
if (n > 1 ) ans = ans / n * (n - 1 );
return ans;
}
void phi (int n) {
for (int i=1 ;i<=n;i++) p[i]=i;
for (int i=2 ;i<=n;i++)
{
if (p[i]==i){
for (int j=i;j<=n;j+=i)
{
p[j]=p[j]/i*(i-1 );
}
}
}
}
欧拉定理
若gcd ( a , m ) = 1 gcd ( a , m ) = 1 ,则a ϕ ( m ) ≡ 1 ( mod m ) a ϕ ( m ) ≡ 1 ( mod m )
简单证明:
设r 1 , r 2 … r ϕ ( m ) r 1 , r 2 … r ϕ ( m ) 为模m m 的既约剩余系(即余数与m m 互质的一批余数互不相同的数的集合)
gcd ( r i , m ) = 1 , gcd ( a , m ) = 1 ⇒ gcd ( a r i , m ) = 1 gcd ( r i , m ) = 1 , gcd ( a , m ) = 1 ⇒ gcd ( a r i , m ) = 1
故a r 1 , a r 2 … a r ϕ ( m ) a r 1 , a r 2 … a r ϕ ( m ) 也为模m m 的既约剩余系
剩余证明与费马小定理的证明相似
可以看出费马小定理是欧拉定理的特殊情况,当m m 为质数时,ϕ ( m ) = m − 1 ϕ ( m ) = m − 1
扩展欧拉定理
a b ≡ ⎧ ⎪
⎪ ⎨ ⎪
⎪ ⎩ a b mod ϕ ( m ) , gcd ( a , m ) = 1 a b , gcd ( a , m ) ≠ 1 , b < ϕ ( m ) ( mod m ) a ( b mod ϕ ( m ) ) + ϕ ( m ) , g c d ( a , m ) ≠ 1 , b ⩾ ϕ ( m ) (1) (2) (3) a b ≡ { (1) a b mod ϕ ( m ) , gcd ( a , m ) = 1 (2) a b , gcd ( a , m ) ≠ 1 , b < ϕ ( m ) ( mod m ) (3) a ( b mod ϕ ( m ) ) + ϕ ( m ) , g c d ( a , m ) ≠ 1 , b ⩾ ϕ ( m )
第三项证明:
设m = s p r , g c d ( s , p ) = 1 m = s p r , g c d ( s , p ) = 1
p ϕ ( s ) ≡ 1 ( mod s ) p ϕ ( s ) ≡ 1 ( mod s )
∵ ϕ ( m ) = ϕ ( s ) ϕ ( p r ) ⇒ ϕ ( s ) | ϕ ( m ) ∵ ϕ ( m ) = ϕ ( s ) ϕ ( p r ) ⇒ ϕ ( s ) | ϕ ( m )
∴ p ϕ ( m ) ≡ 1 ( mod s ) ∴ p ϕ ( m ) ≡ 1 ( mod s )
根据同余性质 p ϕ ( m ) p r ≡ p r ( mod s p r ) ⇒ p ϕ ( m ) + r ≡ p r ( mod m ) p ϕ ( m ) p r ≡ p r ( mod s p r ) ⇒ p ϕ ( m ) + r ≡ p r ( mod m )
则p c ≡ p c − r + r ≡ p ϕ ( m ) + c ( mod m ) , c ⩾ r p c ≡ p c − r + r ≡ p ϕ ( m ) + c ( mod m ) , c ⩾ r
显然r ⩽ ϕ ( m ) r ⩽ ϕ ( m ) (因为ϕ ( m ) = ∏ s i = 1 ( p r i i − p r i − 1 i ) ϕ ( m ) = ∏ i = 1 s ( p i r i − p i r i − 1 ) ,r r 线性增长时,p r − p r − 1 p r − p r − 1 级数增长)
故当c ⩾ ϕ ( m ) c ⩾ ϕ ( m ) 时,p c ≡ p ϕ ( m ) + c ( mod m ) p c ≡ p ϕ ( m ) + c ( mod m ) 也成立
再由于p ϕ ( m ) ≡ p ϕ ( m ) + r − r ≡ p r − r ≡ 1 ( mod m ) p ϕ ( m ) ≡ p ϕ ( m ) + r − r ≡ p r − r ≡ 1 ( mod m )
所以p c ≡ p c mod ϕ ( m ) + ϕ ( m ) ( mod m ) p c ≡ p c mod ϕ ( m ) + ϕ ( m ) ( mod m )
质数幂次类同,( p k ) c ≡ ( p k ) c mod ϕ ( m ) + ϕ ( m ) ( mod m ) ( p k ) c ≡ ( p k ) c mod ϕ ( m ) + ϕ ( m ) ( mod m )
根据算法基本定理a = ∏ p k i i a = ∏ p i k i ,故a b ≡ a ( b mod ϕ ( m ) ) + ϕ ( m ) ( mod m ) a b ≡ a ( b mod ϕ ( m ) ) + ϕ ( m ) ( mod m )
得证
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效