#欧拉定理
a
φ
(
n
)
≡
1
(
m
o
d
n
)
,
g
c
d
(
a
,
n
)
=
1
a^{\varphi(n)}\equiv 1(mod\:n),\:gcd(a,n)=1
aφ(n)≡1(modn),gcd(a,n)=1
对于正整数
n
n
n,代表小于等于
n
n
n的与
n
n
n互质的数的个数,记作
φ
(
n
)
\varphi(n)
φ(n)。
比如
φ
(
6
)
=
2
\varphi(6)=2
φ(6)=2,因为与
6
6
6互质并且小于等于
6
6
6的正整数有
1
,
5
1,5
1,5。
$\$
扩展欧拉定理(降幂公式)
$\$
KaTeX parse error: Unexpected end of input in a macro argument, expected '}' at end of input: …ext{gcd(a,p)$\:\not=KaTeX parse error: Can't use function '$' in math mode at position 3: \:$̲1,$\: b\:$< $\v…\not=KaTeX parse error: Can't use function '$' in math mode at position 3: \:$̲1,$\: b\:\geq$
φ
\varphi
φ§}\end{cases}
\pmod p$$
$\$
除此之外呢,欧拉定理有以下几个性质,
1.
1.\:
1.如果
n
n
n为某一素数
p
p
p,则有
φ
(
p
)
=
p
−
1
\varphi(p)=p-1
φ(p)=p−1。因为
p
p
p为素数,因子只有
1
1
1和
p
p
p,而
p
p
p和
p
p
p不互质,所以$ \varphi§=p-1$。
实际上呢,欧拉定理是费马小定理的一种推广,我们利用性质
1
1
1就可以很容易证明。
费马小定理:
a
p
−
1
≡
1
(
m
o
d
p
)
,
g
c
d
(
a
,
p
)
=
1
a^{p-1}\equiv 1(mod\:p),gcd(a,p)=1
ap−1≡1(modp),gcd(a,p)=1。因为
p
p
p为质数,所以有
φ
(
p
)
=
p
−
1
\varphi(p)=p-1
φ(p)=p−1,代入欧拉定理即可。
推论:
a
p
≡
a
(
m
o
d
p
)
a^p\equiv a(mod\:p)
ap≡a(modp),如果
a
a
a能被
p
p
p整除。
2. 2.\: 2.如果 n n n为某一素数 p p p的幂次,则有 φ ( p a ) = ( p − 1 ) ⋅ p a − 1 \varphi(p^a)=(p-1)\cdot p^{a-1} φ(pa)=(p−1)⋅pa−1。因为比 p a p^a pa小的正整数有 p a − 1 p^a-1 pa−1个,能被 p p p整除的数有 p a − 1 − 1 p^{a-1}-1 pa−1−1个(将 1 → p a − 1 1\to p^a-1 1→pa−1之间 p p p的倍数筛去),所以 φ ( p a ) = p a − 1 − ( p a − 1 − 1 ) = ( p − 1 ) ⋅ p a − 1 \varphi(p^a)=p^a-1-(p^{a-1}-1)=(p-1)\cdot p^{a-1} φ(pa)=pa−1−(pa−1−1)=(p−1)⋅pa−1。
3.
3.\:
3.如果
n
n
n为任意两个正整数
a
a
a和
b
b
b的乘积(
a
a
a和
b
b
b互质),那么有
φ
(
a
⋅
b
)
=
φ
(
a
)
⋅
φ
(
b
)
\varphi(a\cdot b)=\varphi(a)\cdot \varphi(b)
φ(a⋅b)=φ(a)⋅φ(b)。我们设
x
=
ϕ
(
i
)
x=\phi(i)
x=ϕ(i)(即和
a
⋅
b
a\cdot b
a⋅b互质的数),那么就有
(
S
)
:
{
x
1
≡
t
1
(
m
o
d
a
)
(
g
c
d
(
t
1
,
a
)
=
1
)
x
2
≡
t
2
(
m
o
d
b
)
(
g
c
d
(
t
2
,
b
)
=
1
)
(S):\begin{cases} x_1\equiv t_1(mod\:a) \:(gcd(t_1,a)=1)\\ x_2\equiv t_2(mod\:b) \:(gcd(t_2,b)=1) \end{cases}
(S):{x1≡t1(moda)(gcd(t1,a)=1)x2≡t2(modb)(gcd(t2,b)=1)那么我们根据中国剩余定理可知,对于任意
t
1
,
t
2
t_1,t_2
t1,t2,方程组
(
S
)
(S)
(S)的解在区间
[
1
,
a
⋅
b
)
[1,a\cdot b)
[1,a⋅b)有唯一解与之对应。
t
1
t_1
t1的取值有
φ
(
a
)
\varphi(a)
φ(a)个,
t
2
t_2
t2的取值有
φ
(
b
)
\varphi(b)
φ(b)个。
所以
φ
(
a
⋅
b
)
=
φ
(
a
)
⋅
φ
(
b
)
\varphi(a\cdot b)=\varphi(a)\cdot \varphi(b)
φ(a⋅b)=φ(a)⋅φ(b)。
4.
4.\:
4.设
n
=
p
1
e
1
⋅
p
2
e
2
⋅
p
3
e
3
.
.
.
.
.
.
p
k
e
k
n=p_1^{e_1}\cdot p_2^{e_2}\cdot p_3^{e_3}......p_k^{e_k}
n=p1e1⋅p2e2⋅p3e3......pkek(
p
i
p_i
pi为素数),则有
φ
(
n
)
=
n
⋅
(
1
−
1
p
1
)
⋅
(
1
−
1
p
2
)
⋅
(
1
−
1
p
3
)
.
.
.
.
.
.
(
1
−
1
p
k
)
\varphi(n)=n\cdot(1-\frac{1}{p_1})\cdot(1-\frac{1}{p_2})\cdot(1-\frac{1}{p_3})......(1-\frac{1}{p_k})
φ(n)=n⋅(1−p11)⋅(1−p21)⋅(1−p31)......(1−pk1)。
根据性质
2
2
2和性质
3
3
3就可以很好的推出:因为
p
i
p_i
pi都为素数,所以每一个
p
i
p_i
pi都是互质的,所以同样
p
i
e
i
p_i^{e_i}
piei也是互质的。因此由性质
2
2
2:
φ
(
p
i
e
i
)
=
p
i
e
i
−
1
−
(
p
i
e
i
−
1
−
1
)
=
p
i
e
i
⋅
(
1
−
1
p
i
)
\varphi(p_i^{e_i})=p_i^{e_i}-1-(p_i^{e_i-1}-1)=p_i^{e_i}\cdot (1-\frac{1}{p_i})
φ(piei)=piei−1−(piei−1−1)=piei⋅(1−pi1),和性质
3
3
3:
φ
(
p
1
e
1
⋅
p
2
e
2
⋅
p
3
e
3
.
.
.
.
.
.
p
k
e
k
)
=
φ
(
p
1
e
1
)
⋅
φ
(
p
2
e
2
)
⋅
φ
(
p
3
e
3
)
.
.
.
.
.
.
φ
(
p
k
e
k
)
\varphi(p_1^{e_1}\cdot p_2^{e_2}\cdot p_3^{e_3}......p_k^{e_k})=\varphi(p_1^{e_1})\cdot \varphi(p_2^{e_2})\cdot \varphi(p_3^{e_3})......\varphi(p_k^{e_k})
φ(p1e1⋅p2e2⋅p3e3......pkek)=φ(p1e1)⋅φ(p2e2)⋅φ(p3e3)......φ(pkek),可以推出
φ
(
n
)
=
n
⋅
(
1
−
1
p
1
)
⋅
(
1
−
1
p
2
)
⋅
(
1
−
1
p
3
)
.
.
.
.
.
.
(
1
−
1
p
k
)
\varphi(n)=n\cdot(1-\frac{1}{p_1})\cdot(1-\frac{1}{p_2})\cdot(1-\frac{1}{p_3})......(1-\frac{1}{p_k})
φ(n)=n⋅(1−p11)⋅(1−p21)⋅(1−p31)......(1−pk1)。
#欧拉函数的线性筛法
根据如下三个性质可以完成线性筛法。
1.
φ
(
p
)
=
p
−
1
1.\:\:\varphi(p)=p-1
1.φ(p)=p−1
2.
φ
(
p
⋅
i
)
=
p
⋅
φ
(
i
)
(
p
%
i
=
0
)
2.\:\:\varphi(p\cdot i)=p\cdot \varphi(i)\:\:(p\%i=0)
2.φ(p⋅i)=p⋅φ(i)(p%i=0)
3.
φ
(
p
⋅
i
)
=
(
p
−
1
)
⋅
φ
(
i
)
(
p
%
i
≠
0
)
3.\:\:\varphi(p\cdot i)=(p-1)\cdot \varphi(i)\:\:(p\%i\not=0)
3.φ(p⋅i)=(p−1)⋅φ(i)(p%i=0)
(具体证明就不证啦啦~作为模板使用就好啦_)
void initPhi(int n)
{
phi[1] = 1; //φ(1) = 1
for(int i = 2; i <= n; ++i){
if(!vis[i]){
phi[i] = i - 1; //性质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){ //性质2
phi[i * prime[j]] = phi[i] * prime[j];
break;
}
phi[i * prime[j]] = phi[i] * phi[prime[j]]; //性质3
}
}
}