在数论,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目(φ(1)=1)。此函数以其首名研究者欧拉命名(Euler’s totient function),它又称为Euler’s totient function、φ函数、欧拉商数等。
因为 n n 为质数,与他互质的个数就是 n-1
因为 φ(n) φ ( n ) 是积性函数。
积性函数
指对于所有互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数。
1→n 1 → n 中除了p的倍数,都与 pk p k 互质, 1→n 1 → n 中 p p 倍数的个数为 pk÷p=pk−1 p k ÷ p = p k − 1
由性质3可得
φ(n)=∏i=1n(pi−1)pki−1i(pi|n)=(pk11pk22pk33…pkmm)∏i=1m(1−1pi)=n∏i=1m(1−1pi) φ ( n ) = ∏ i = 1 n ( p i − 1 ) p i k i − 1 ( p i | n ) = ( p 1 k 1 p 2 k 2 p 3 k 3 … p m k m ) ∏ i = 1 m ( 1 − 1 p i ) = n ∏ i = 1 m ( 1 − 1 p i )
首先证明 gcd(n,i)=1 g c d ( n , i ) = 1 ,则 gcd(n,n−i)=1 g c d ( n , n − i ) = 1
利用反证法:
设存在 gcd(n,i)=1,gcd(n,n−i)=k g c d ( n , i ) = 1 , g c d ( n , n − i ) = k ,那么可得 (n−i)%k=0,n%k=0 ( n − i ) % k = 0 , n % k = 0 ,所以 i%k=0 i % k = 0 ,即 gcd(n,i)=k g c d ( n , i ) = k
与假设矛盾,所以 gcd(n,i)=1 g c d ( n , i ) = 1 ,则 gcd(n,n−i)=1 g c d ( n , n − i ) = 1 成立
由这个式子可得每个与 n n 互质的数都是成对的,因为 gcd(n,i)=gcd(n,n−i)=1 g c d ( n , i ) = g c d ( n , n − i ) = 1 , i i 和 (n−i) ( n − i ) 成对,这样就可证明5性质
对于前半部分,我们只需证明 如果 gcd(i,n)=1 g c d ( i , n ) = 1 则 gcd(i,n+i)=1 g c d ( i , n + i ) = 1
同上反证法:
设 gcd(i,n)=1,gcd(i,n+i)=k g c d ( i , n ) = 1 , g c d ( i , n + i ) = k
设 n+i=ka1,i=ka2 n + i = k a 1 , i = k a 2 ,则 ka2+n=ka1,n=(a1−a2)k k a 2 + n = k a 1 , n = ( a 1 − a 2 ) k ,所以 gcd(i,n)>=k g c d ( i , n ) >= k ,与假设矛盾, gcd(i,n)=1 g c d ( i , n ) = 1 ,则 gcd(i,n+i)=1 g c d ( i , n + i ) = 1 成立
有了上面那个式子就好证明了,因为 p为质数,所以与 i∗p i ∗ p 互质的数也就是 1→(i∗p) 1 → ( i ∗ p ) 与 i i 互质的数的个数,这样就可以用上面那个定理了,设 n n 是小于 i i 且与 i i 互质的数,则 gcd(i,n)=1 g c d ( i , n ) = 1 则 gcd(i,n+i)=gcd(i,n+2i)=gcd(i,n+3i)=⋯=gcd(i,n+(p−1)i) g c d ( i , n + i ) = g c d ( i , n + 2 i ) = g c d ( i , n + 3 i ) = ⋯ = g c d ( i , n + ( p − 1 ) i ) 也就是原来的 p p 陪
后半部分更好证明, i i 与 p p 互质,那就是性质2
正规的推导看不懂,在搜了很多博客后看到了一种简单的证明方法
1n,2n,3n,4n,…,nn 1 n , 2 n , 3 n , 4 n , … , n n
一共n个分数,把所有数化简到最简分数,则每个分母都是n的因子,也就是说n 是所有分母的倍数,每个分母存在的数量就是 φ(i) φ ( i ) 所有 φ(i) φ ( i ) 的和也就是所有数的个数 n n
证明
设小于 n n 且与 n n 互质的集合 Z Z , 则 |Z|=φ(n),Z={q1,q2,q3…qm} | Z | = φ ( n ) , Z = { q 1 , q 2 , q 3 … q m }
设集合 Y={a∗p1 mod m,a∗p2 mod m… a∗pφ(m} Y = { a ∗ p 1 m o d m , a ∗ p 2 m o d m … a ∗ p φ ( m }我们只需证明 Y=Z Y = Z 即可
因为 a a 与 n n 互质, pi p i 与 n n 互质,所以 a∗pi a ∗ p i 与 n n 互质,所以 a∗pi mod n∈Z a ∗ p i m o d n ∈ Z
若 i != j i ! = j 那么 a∗pi mod n != a∗pj mod n a ∗ p i m o d n ! = a ∗ p j m o d n
一如既往的反证法:
设 a∗pi mod n = a∗pj mod n a ∗ p i m o d n = a ∗ p j m o d n , a∗pi=ki∗n+b a ∗ p i = k i ∗ n + b ,那么a∗pi−a∗pj=ki∗n+b−kj∗n−b化简得a(pi−pj)=n(ki−kj) 进而得n=pi−pjki−kja a ∗ p i − a ∗ p j = k i ∗ n + b − k j ∗ n − b 化 简 得 a ( p i − p j ) = n ( k i − k j ) 进 而 得 n = p i − p j k i − k j a,这与 a n a n 互质矛盾,所以 i != j i ! = j 那么 a∗pi mod n != a∗pj mod n a ∗ p i m o d n ! = a ∗ p j m o d n 成立
因此我们可得 Z=Y Z = Y
所以我们可以列出a∗p1∗a∗p2∗⋯∗a∗pφ(n)≡p1∗p2∗⋯∗pφ(n)( mod n)→aφ(n)≡1 ( mod n) a ∗ p 1 ∗ a ∗ p 2 ∗ ⋯ ∗ a ∗ p φ ( n ) ≡ p 1 ∗ p 2 ∗ ⋯ ∗ p φ ( n ) ( m o d n ) → a φ ( n ) ≡ 1 ( m o d n )
费马小定理就是他的一种情况 a与p a 与 p 互质时 ap−1≡1 ( mod p) a p − 1 ≡ 1 ( m o d p ) ,这时候 φ(p)=p−1 φ ( p ) = p − 1 带进去这个性质便可得
板子 线性筛法中的p[]就是
公式
Ak≡Ak%φ(m)(mod m)gcd(A,m)=1 A k ≡ A k % φ ( m ) ( m o d m ) g c d ( A , m ) = 1
Ak≡Ak(mod m)gcd(A,m)!=1,k<φ(m) A k ≡ A k ( m o d m ) g c d ( A , m ) ! = 1 , k < φ ( m )
Ak≡Ak%φ(m)+φ(m)(mod m)gcd(A,m)!=1,k>φ(m) A k ≡ A k % φ ( m ) + φ ( m ) ( m o d m ) g c d ( A , m ) ! = 1 , k > φ ( m )
证明见:https://blog.csdn.net/weixin_38686780/article/details/81272848
看不懂,只好背公式,数学还是太垃圾了
板子
O(n) O ( n ) ,线性筛法
int p[maxn];
bool vis[maxn];
ll phi[maxn];
int cnt=0;
ll get_phi(int len=maxn){
phi[1]=1;
for(int i=2;iif(!vis[i]){
p[cnt++]=i;
phi[i]=i-1;
}
for(int j=0;jif(p[j]*i>=len) break;
vis[p[j]*i]=1;
if(i%p[j]==0){
phi[i*p[j]]=p[j]*phi[i];
break;
}
phi[i*p[j]]=phi[i]*(p[j]-1);
}
}
}
O(n−−√) O ( n ) ,适合求单点
ll get_phi(ll x){
ll res=x;
for(int i=2;i*i<=x;i++)
{
if(x%i==0){
res=res-res/i;
while(x%i==0) x/=i;
}
}
if(x!=1) res=res-res/x;
return res;
}
练习
BZOJ 3884 上帝与集合的正确用法 ( O(n−−√) O ( n ) 板子) 题解