定理0
算术函数f如果满足对于任意两个互质的正整数m和n,均有f(mn)=f(m)f(n),就称f为积性函数(或乘性函数)。
如果对于任意两个正整数m和n,均有f(mn)=f(m)f(n),就称为完全积性函数。
定理1
对于素数p,ϕ(p)=p−1。
定理2
ϕ(p
n
)=p
n
−p
n−1
,因为素数幂p
n
不互质的只有p的倍数,一共有p
n
/p=p
n−1
个。
定理3
若m、n互质,ϕ(mn)=ϕ(m)ϕ(n),所以欧拉函数是积性函数。
因为mn互质,和m互质的数乘上和n互质的数就会和mn互质。
定理4
设n=p1
a1
p2
a2
...pk
ak
为正整数n的素数幂分解,那么ϕ(n)=n(1−1/p1)(1−1/p2)...(1−1/pk)。
由定理2,ϕ(p
n
)=p
n
−p
n−1
=p
n
(1-1/p),又由定理3,ϕ(n)=p1
a1
p2
a2
...pk
ak
(1−1/p1)(1−1/p2)...(1−1/pk)=n(1−1/p1)(1−1/p2)...(1−1/pk)
所以可以方便地求欧拉函数:边找质因子边算,res=n,找到一个质因子p,res=res/p*(p-1)。
int euler(int x){
int res = x;
for(int i=2; i*i<=x; i++)
if(x % i == 0){
res = res / i * (i - 1);
while(x % i == 0) x /= i;
if(x > 1) res = res / x * (x - 1);
return res;
也可以方便地求出所有数的欧拉函数。过程就是先让每个phi[i]=i,再对每个质数p,j为它的倍数,phi[j]=phi[j]/p*(p-1)。
for(int i=1; i<=maxn; ++i) phi[i] = i;
for(int i=2; i<=maxn; i+=2) phi[i] /= 2;
for(int i=3; i<=maxn; i+=2)
if(phi[i] == i){
for(int j=i; j<=maxn; j+=i)
phi[j] = phi[j] / i * (i - 1);
由定理2,ϕ(pk)=pk−pk−1,
p=2时,ϕ(2k)=2k−2k−1=2k−1是偶数,
对于大于2的素数p,ϕ(pk)=pk−pk−1,p为奇数,p的次方也为奇数,两个奇数相减为偶数。
所以ϕ(pk)为偶数。
又由定理3,ϕ(n)=ϕ(p1a1)ϕ(p2a2)...ϕ(pkak),所以ϕ(n)一定是偶数。
定理6 ∑d|nϕ(d)=n。
┆凉┆暖┆降┆等┆幸┆我┆我┆里┆将┆ ┆可┆有┆谦┆戮┆那┆ ┆大┆始┆ ┆然┆
┆薄┆一┆临┆你┆的┆还┆没┆ ┆来┆ ┆是┆来┆逊┆没┆些┆ ┆雁┆终┆ ┆而┆
┆ ┆暖┆ ┆如┆地┆站┆有┆ ┆也┆ ┆我┆ ┆的┆有┆精┆ ┆也┆没┆ ┆你┆
┆ ┆这┆ ┆试┆方┆在┆逃┆ ┆会┆ ┆在┆ ┆清┆来┆准┆ ┆没┆有┆ ┆没┆
┆ ┆生┆ ┆探┆ ┆最┆避┆ ┆在┆ ┆这┆ ┆晨┆ ┆的┆ ┆有┆来┆ ┆有┆
┆ ┆之┆ ┆般┆ ┆不┆ ┆ ┆这┆ ┆里┆ ┆没┆ ┆杀┆ ┆来┆ ┆ ┆来┆