aφ(n)≡1(modn),gcd(a,n)=1
对于正整数
n
,代表小于等于
n
的与
n
互质的数的个数,记作
φ(n)
。
比如
φ(6)=2
,因为与
6
互质并且小于等于
6
的正整数有
1,5
。
扩展欧拉定理(降幂公式)
ab≡⎧⎩⎨⎪⎪ab%φ(p),ab,ab%φ(p)+φ(p),gcd(a,p)=1gcd(a,p)≠1,b< φ(p)gcd(a,p)≠1,b≥ φ(p)
(mod
p)
除此之外呢,欧拉定理有以下几个性质,
1.
如果
n
为某一素数
p
,则有
φ(p)=p−1
。因为
p
为素数,因子只有
1
和
p
,而
p
和
p
不互质,所以
φ(p)=p−1
。
实际上呢,欧拉定理是费马小定理的一种推广,我们利用性质
1
就可以很容易证明。
费马小定理:
ap−1≡1(modp),gcd(a,p)=1
。因为
p
为质数,所以有
φ(p)=p−1
,代入欧拉定理即可。
推论:
ap≡a(modp)
,如果
a
能被
p
整除。
2.
如果
n
为某一素数
p
的幂次,则有
φ(pa)=(p−1)⋅pa−1
。因为比
pa
小的正整数有
pa−1
个,能被
p
整除的数有
pa−1−1
个(将
1→pa−1
之间
p
的倍数筛去),所以
φ(pa)=pa−1−(pa−1−1)=(p−1)⋅pa−1
。
3.
如果
n
为任意两个正整数
a
和
b
的乘积(
a
和
b
互质),那么有
φ(a⋅b)=φ(a)⋅φ(b)
。我们设
x=ϕ(i)
(即和
a⋅b
互质的数),那么就有
(S):{x1≡t1(moda)(gcd(t1,a)=1)x2≡t2(modb)(gcd(t2,b)=1)
那么我们根据
中国剩余定理可知,对于任意
t1,t2
,方程组
(S)
的解在区间
[1,a⋅b)
有唯一解与之对应。
t1
的取值有
φ(a)
个,
t2
的取值有
φ(b)
个。
所以
φ(a⋅b)=φ(a)⋅φ(b)
。
4.
设
n=pe11⋅pe22⋅pe33......pekk
(
pi
为素数),则有
φ(n)=n⋅(1−1p1)⋅(1−1p2)⋅(1−1p3)......(1−1pk)
。
根据性质
2
和性质
3
就可以很好的推出:因为
pi
都为素数,所以每一个
pi
都是互质的,所以同样
peii
也是互质的。因此由性质
2
:
φ(peii)=peii−1−(pei−1i−1)=peii⋅(1−1pi)
,和性质
3
:
φ(pe11⋅pe22⋅pe33......pekk)=φ(pe11)⋅φ(pe22)⋅φ(pe33)......φ(pekk)
,可以推出
φ(n)=n⋅(1−1p1)⋅(1−1p2)⋅(1−1p3)......(1−1pk)
。
欧拉函数的线性筛法
根据如下三个性质可以完成线性筛法。
1.φ(p)=p−1
2.φ(p⋅i)=p⋅φ(i)(p%i=0)
3.φ(p⋅i)=(p−1)⋅φ(i)(p%i≠0)
(具体证明就不证啦啦~作为模板使用就好啦^_^)
void initPhi(int n)
{
phi[1] = 1;
for(int i = 2; i <= n; ++i){
if(!vis[i]){
phi[i] = i - 1;
prime[++cnt] = i;
}
for(int j = 1; j <= cnt; ++j){
if(i * prime[j] > n) break;
vis[i * prime[j]] = 1;
if(i % prime[j] == 0){
phi[i * prime[j]] = phi[i] * prime[j];
break;
}
phi[i * prime[j]] = phi[i] * phi[prime[j]];
}
}
}