欧拉函数初步
概念
若 a , b ∈ Z , gcd ( a , b ) = 1 , 则 称 a 与 b 互 质 对 于 n ∈ Z , 将 区 间 [ 1 , n ] 中 与 n 互 质 的 个 数 称 为 欧 拉 函 数 , 记 作 φ ( n ) 若a,b\in\Z,\gcd(a,b)=1,则称a与b\color{Blue}互质\\\color{black}对于n\in\Z,将区间[1,n]中与n互质的个数称为\color{Blue}{欧拉函数},记作\varphi(n) 若a,b∈Z,gcd(a,b)=1,则称a与b互质对于n∈Z,将区间[1,n]中与n互质的个数称为欧拉函数,记作φ(n)
欧拉函数
考
虑
n
=
p
1
c
1
⋅
p
2
c
2
⋅
p
3
c
3
⋯
p
m
c
m
,
则
有
φ
(
n
)
=
n
⋅
∏
i
=
1
m
(
1
−
1
p
i
)
\boxed{考虑n=p_1^{c_1}\cdot p_2^{c_2}\cdot p_3^{c_3}\cdots p_m^{c_m},则有\color{Red}\varphi(n)=n\cdot\prod\limits_{i=1}^{m}(1-\dfrac{1}{p_i})}
考虑n=p1c1⋅p2c2⋅p3c3⋯pmcm,则有φ(n)=n⋅i=1∏m(1−pi1)
证明:
若一个数质因数与n的质因数都不相同,则这个数和n互质,因此我们只需要考虑不是n的质因数的质数可以构成多少
[
1
,
n
]
[1,n]
[1,n]内的正整数即可。
∵
对
于
n
的
质
因
数
p
i
,
都
在
[
1
,
n
]
内
有
n
⋅
1
p
i
个
数
与
n
有
共
同
的
质
因
数
p
i
∴
对
于
质
因
数
p
i
,
都
在
[
1
,
n
]
内
有
n
⋅
(
1
−
1
p
i
)
个
数
不
是
质
因
数
p
i
的
倍
数
∴
不
是
n
任
何
一
个
质
因
数
倍
数
的
数
在
[
1
,
n
]
内
有
n
⋅
∏
i
=
1
m
(
1
−
1
p
i
)
个
∴
φ
(
n
)
=
n
⋅
∏
i
=
1
m
(
1
−
1
p
i
)
\because 对于n的质因数p_i,都在[1,n]内有n\cdot \dfrac{1}{p_i}个数与n有共同的质因数p_i\\\therefore 对于质因数p_i,都在[1,n]内有n\cdot (1-\dfrac{1}{p_i})个数不是质因数p_i的倍数\\\therefore 不是n任何一个质因数倍数的数在[1,n]内有n\cdot\prod\limits_{i=1}^{m}(1-\dfrac{1}{p_i})个\\\therefore \varphi(n)=n\cdot\prod\limits_{i=1}^{m}(1-\dfrac{1}{p_i})
∵对于n的质因数pi,都在[1,n]内有n⋅pi1个数与n有共同的质因数pi∴对于质因数pi,都在[1,n]内有n⋅(1−pi1)个数不是质因数pi的倍数∴不是n任何一个质因数倍数的数在[1,n]内有n⋅i=1∏m(1−pi1)个∴φ(n)=n⋅i=1∏m(1−pi1)
#include<bits/stdc++.h>
using namespace std;
int n;
double ans=0;
int main()
{
cin>>n;
ans=n;
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
ans=ans*(i-1)*1.0/(i*1.0);
while(n%i==0) n/=i;
}
}
if(n>1)
{
ans=ans*(n-1)*1.0/(n*1.0);
}
cout<<ans;
return 0;
}
- 下文中的所有 p i p_i pi 都表示质因数, p p p表示质数
简单性质
性 质 1 φ ( 1 ) = 1 性质 \mathbf{1}\quad\boxed{\varphi(1)=1} 性质1φ(1)=1
性 质 2 ∀ p 为 质 数 , φ ( p ) = p − 1 性质 \mathbf{2} \quad\boxed{\forall p为质数,\varphi(p)=p-1} 性质2∀p为质数,φ(p)=p−1
性
质
3
∀
p
为
质
数
,
n
=
p
k
,
φ
(
n
)
=
p
k
−
p
k
−
1
=
p
k
−
1
(
p
−
1
)
性质 \mathbf{3} \quad\boxed{\color{Red}\forall p为质数,n=p^k,\varphi(n)=p^k-p^{k-1}=p^{k-1}(p-1)}
性质3∀p为质数,n=pk,φ(n)=pk−pk−1=pk−1(p−1)
证明:
∵
n
=
p
k
,
p
为
质
数
∴
n
的
质
因
数
只
有
p
∴
若
gcd
(
a
,
n
)
≠
1
⇔
∀
s
∈
Z
,
s
⋅
p
≤
p
k
,
a
=
s
p
∴
s
≤
p
k
−
1
∴
有
p
k
−
1
个
a
不
与
n
互
质
∴
,
φ
(
n
)
=
p
k
−
p
k
−
1
=
p
k
−
1
(
p
−
1
)
\because n=p^k,p为质数\\\therefore n的质因数只有p\\\therefore 若\gcd(a,n)\ne1\Leftrightarrow \forall s\in\Z,s\cdot p\leq p^k,a=sp\\\therefore s\leq p^{k-1}\\\therefore 有p^{k-1}个 a不与n互质\\\therefore ,\varphi(n)=p^k-p^{k-1}=p^{k-1}(p-1)
∵n=pk,p为质数∴n的质因数只有p∴若gcd(a,n)=1⇔∀s∈Z,s⋅p≤pk,a=sp∴s≤pk−1∴有pk−1个a不与n互质∴,φ(n)=pk−pk−1=pk−1(p−1)
性
质
4
若
gcd
(
n
,
m
)
=
1
,
φ
(
n
⋅
m
)
=
φ
(
n
)
⋅
φ
(
m
)
,
即
欧
拉
函
数
为
积
性
函
数
性质 \mathbf{4} \quad\boxed{\color{Red}若\gcd(n,m)=1,\varphi(n\cdot m)=\varphi(n)\cdot \varphi(m),即欧拉函数为积性函数}
性质4若gcd(n,m)=1,φ(n⋅m)=φ(n)⋅φ(m),即欧拉函数为积性函数
证明:
∵
gcd
(
n
,
m
)
=
1
,
所
以
n
与
m
的
质
因
数
集
合
无
交
集
∴
可
将
n
的
质
因
数
集
合
表
示
为
P
=
{
p
i
∣
1
≤
i
≤
α
}
,
m
的
质
因
数
集
合
表
示
为
Q
=
{
p
i
∣
α
+
1
≤
i
≤
β
}
∴
n
m
的
质
因
数
集
合
可
以
表
示
为
P
∪
Q
,
即
{
p
i
∣
1
≤
i
≤
β
}
∴
φ
(
n
)
⋅
φ
(
m
)
=
n
⋅
m
⋅
∏
i
=
1
α
(
1
−
1
p
i
)
⋅
∏
i
=
α
+
1
β
(
1
−
1
p
i
)
=
n
m
⋅
∏
i
=
1
β
(
1
−
1
p
i
)
=
φ
(
n
m
)
\because \gcd(n,m)=1,所以n与m的质因数集合无交集\\\therefore 可将n的质因数集合表示为P=\{p_i\mid \, 1\leq i\leq \alpha\},m的质因数集合表示为Q=\{p_i\mid \, \alpha+1\leq i\leq \beta\}\\\therefore nm的质因数集合可以表示为P\cup Q ,即\{p_i\mid \, 1\leq i\leq \beta \}\\\therefore \varphi(n)\cdot \varphi(m)=n\cdot m\cdot \prod\limits_{i=1}^{\alpha}(1-\dfrac{1}{p_i})\cdot \prod\limits_{i=\alpha+1}^{\beta}(1-\dfrac{1}{p_i})\\\qquad \qquad \qquad \, \, =nm\cdot\prod\limits_{i=1}^{\beta}(1-\dfrac{1}{p_i})\\\qquad \qquad \qquad \, \, =\varphi(nm)
∵gcd(n,m)=1,所以n与m的质因数集合无交集∴可将n的质因数集合表示为P={pi∣1≤i≤α},m的质因数集合表示为Q={pi∣α+1≤i≤β}∴nm的质因数集合可以表示为P∪Q,即{pi∣1≤i≤β}∴φ(n)⋅φ(m)=n⋅m⋅i=1∏α(1−pi1)⋅i=α+1∏β(1−pi1)=nm⋅i=1∏β(1−pi1)=φ(nm)
性
质
5
对
于
质
数
p
,
若
p
∣
n
,
则
φ
(
n
⋅
p
)
=
φ
(
n
)
⋅
p
,
否
则
φ
(
n
⋅
p
)
=
φ
(
n
)
⋅
φ
(
p
)
性质 \mathbf{5} \quad\boxed{\color{Red}对于质数p,若p\mid n,则\varphi(n\cdot p)=\varphi(n)\cdot p,否则\varphi(n\cdot p)=\varphi(n)\cdot \varphi(p)}
性质5对于质数p,若p∣n,则φ(n⋅p)=φ(n)⋅p,否则φ(n⋅p)=φ(n)⋅φ(p)
证明:
考
虑
p
∣
φ
(
n
)
∴
∃
s
,
k
∈
Z
,
n
=
p
k
⋅
s
∴
gcd
(
n
p
k
,
p
k
⋅
p
)
=
1
∵
欧
拉
函
数
是
积
性
函
数
∴
φ
(
n
⋅
p
)
=
φ
(
n
p
k
)
⋅
φ
(
p
k
+
1
)
=
n
p
k
⋅
∏
i
=
1
m
(
1
−
1
p
i
)
(
1
−
1
p
)
⋅
p
k
(
p
−
1
)
=
n
⋅
1
p
k
⋅
p
k
⋅
∏
i
=
1
m
(
1
−
1
p
i
)
⋅
p
p
−
1
⋅
(
p
−
1
)
=
n
⋅
∏
i
=
1
m
(
1
−
1
p
i
)
⋅
p
=
φ
(
n
)
⋅
p
考
虑
p
∤
n
∵
p
∤
n
,
p
为
质
数
∴
gcd
(
p
,
n
)
=
1
∴
φ
(
n
⋅
p
)
=
φ
(
n
)
⋅
φ
(
p
)
考虑p\mid\varphi(n)\\\therefore \exist s,k\in\Z,n=p^k\cdot s\\\therefore \gcd(\dfrac{n}{p^k},p^k\cdot p)=1\\\because 欧拉函数是积性函数\\\therefore \varphi(n\cdot p)=\varphi(\dfrac{n}{p^k})\cdot\varphi(p^{k+1})\\\quad =\dfrac{n}{p^k}\cdot\dfrac{\prod\limits_{i=1}^{m}(1-\dfrac{1}{p_i})}{(1-\dfrac{1}{p})}\cdot p^k(p-1)\\\quad =n\cdot \dfrac{1}{p^k}\cdot p^k\cdot \prod\limits_{i=1}^{m}(1-\dfrac{1}{p_i})\cdot \dfrac{p}{p-1}\cdot (p-1)\\\quad =n\cdot \prod\limits_{i=1}^{m}(1-\dfrac{1}{p_i})\cdot p\\\quad =\varphi(n)\cdot p\\考虑p \nmid n\\\because p\nmid n,p为质数\\\therefore \gcd(p,n)=1\\\therefore \varphi(n\cdot p)=\varphi(n)\cdot \varphi(p)
考虑p∣φ(n)∴∃s,k∈Z,n=pk⋅s∴gcd(pkn,pk⋅p)=1∵欧拉函数是积性函数∴φ(n⋅p)=φ(pkn)⋅φ(pk+1)=pkn⋅(1−p1)i=1∏m(1−pi1)⋅pk(p−1)=n⋅pk1⋅pk⋅i=1∏m(1−pi1)⋅p−1p⋅(p−1)=n⋅i=1∏m(1−pi1)⋅p=φ(n)⋅p考虑p∤n∵p∤n,p为质数∴gcd(p,n)=1∴φ(n⋅p)=φ(n)⋅φ(p)
性
质
6
∀
n
>
2
,
2
∣
φ
(
n
)
性质\mathbf{6}\quad\boxed{\color{Red}\forall n>2,2\mid\varphi(n)}
性质6∀n>2,2∣φ(n)
证明:
考
虑
g
∈
Z
,
g
∣
a
,
g
∣
b
∵
∃
s
,
k
∈
Z
a
=
s
⋅
g
,
b
=
k
⋅
g
∴
a
−
b
=
g
(
s
−
k
)
∴
g
∣
(
a
−
b
)
∴
所
以
(
a
−
b
)
的
因
数
集
与
a
与
b
的
公
因
数
集
完
全
相
同
∴
若
a
>
b
,
g
c
d
(
a
,
b
)
=
g
c
d
(
a
,
a
−
b
)
=
g
c
d
(
b
,
a
−
b
)
∴
当
gcd
(
n
,
m
)
=
1
,
都
有
gcd
(
n
,
n
−
m
)
=
1
∴
与
n
互
质
的
数
是
成
对
出
现
的
∴
∀
n
>
2
,
2
∣
φ
(
n
)
对
于
n
<
2
的
情
况
请
读
者
自
行
考
虑
验
证
考虑g\in \Z,g\mid a,g\mid b\\\because \exist s,k\in\Z a=s\cdot g,b=k\cdot g\\\therefore a-b=g(s-k)\\\therefore g\mid (a-b)\\\therefore 所以(a-b)的因数集与a与b的公因数集完全相同\\\therefore 若 a>b,gcd(a,b)=gcd(a,a-b)=gcd(b,a-b)\\\therefore 当\gcd(n,m)=1,都有\gcd(n,n-m)=1\\\therefore 与n互质的数是成对出现的\\\therefore \forall n>2,2\mid \varphi(n)\\对于n<2的情况请读者自行考虑验证
考虑g∈Z,g∣a,g∣b∵∃s,k∈Za=s⋅g,b=k⋅g∴a−b=g(s−k)∴g∣(a−b)∴所以(a−b)的因数集与a与b的公因数集完全相同∴若a>b,gcd(a,b)=gcd(a,a−b)=gcd(b,a−b)∴当gcd(n,m)=1,都有gcd(n,n−m)=1∴与n互质的数是成对出现的∴∀n>2,2∣φ(n)对于n<2的情况请读者自行考虑验证
性
质
7
∀
n
>
1
,
[
1
,
n
]
中
与
n
互
质
的
数
和
为
n
⋅
φ
(
n
)
2
性质\mathbf{7}\quad \boxed{\color{Red} \forall n>1,[1,n]中与n互质的数和为 n\cdot \dfrac{\varphi(n)}{2}}
性质7∀n>1,[1,n]中与n互质的数和为n⋅2φ(n)
证明:
∵
引
用
性
质
6
证
明
中
的
结
论
,
若
m
与
n
互
质
,
必
有
n
−
m
也
与
n
互
质
∴
m
+
(
n
−
m
)
=
n
∵
n
中
与
n
互
质
的
数
对
(
m
,
n
−
m
)
有
φ
(
n
)
⋅
1
2
对
∴
[
1
,
n
]
中
与
n
互
质
的
数
的
和
为
:
(
m
+
(
n
−
m
)
)
⋅
φ
(
n
)
2
=
n
⋅
φ
(
n
)
2
\because 引用性质6证明中的结论,若m与n互质,必有n-m也与n互质\\\therefore m+(n-m)=n\\\because n中与n互质的数对(m,n-m)有\varphi(n)\cdot \dfrac{1}{2}对\\\therefore [1,n]中与 n互质的数的和为:\\\quad (m+(n-m))\cdot \dfrac{\varphi(n)}{2}\\\quad =n\cdot \dfrac{\varphi(n)}{2}
∵引用性质6证明中的结论,若m与n互质,必有n−m也与n互质∴m+(n−m)=n∵n中与n互质的数对(m,n−m)有φ(n)⋅21对∴[1,n]中与n互质的数的和为:(m+(n−m))⋅2φ(n)=n⋅2φ(n)
性 质 8 ∑ d ∣ n φ ( d ) = n 性质\mathbf{8}\quad\boxed{\color{Red} \sum_{d\mid n}\varphi(d)=n} 性质8d∣n∑φ(d)=n
证明:
考
虑
f
(
n
)
=
∑
d
∣
n
φ
(
n
)
,
试
证
明
当
gcd
(
n
,
m
)
=
1
时
,
f
(
n
⋅
m
)
=
f
(
n
)
⋅
f
(
m
)
f
(
n
)
⋅
f
(
m
)
=
∑
i
∣
n
φ
(
i
)
⋅
∑
j
∣
m
φ
(
j
)
=
φ
(
i
1
)
⋅
φ
(
j
1
)
+
φ
(
i
1
)
⋅
φ
(
j
2
)
+
φ
(
i
1
)
⋅
φ
(
j
3
)
⋯
φ
(
i
1
)
⋅
φ
(
j
m
)
+
φ
(
i
2
)
⋅
φ
(
j
1
)
+
φ
(
i
2
)
⋅
φ
(
j
2
)
⋯
φ
(
i
n
)
⋅
φ
(
j
m
)
=
φ
(
i
1
⋅
j
1
)
+
φ
(
i
1
⋅
j
2
)
⋯
+
φ
(
i
n
⋅
j
m
)
∵
g
c
d
(
n
,
m
)
=
1
∴
可
以
得
到
,
i
1
⋅
i
2
⋯
i
n
⋅
j
m
构
成
了
n
⋅
m
的
所
有
因
数
∴
gcd
(
n
,
m
)
=
1
,
f
(
n
m
)
=
f
(
n
)
⋅
f
(
m
)
∵
p
为
质
数
,
有
f
(
p
k
)
=
φ
(
1
)
+
φ
(
p
)
+
φ
(
p
2
)
⋯
+
φ
(
p
k
)
=
1
+
(
p
−
1
)
+
(
p
2
−
p
)
⋯
+
(
p
k
−
p
k
−
1
)
=
p
k
∵
任
意
整
数
n
=
p
1
c
1
⋅
p
2
c
2
⋯
p
m
c
m
∴
∀
n
∈
Z
,
f
(
n
)
=
f
(
p
1
c
1
⋅
p
2
c
2
⋯
p
m
c
m
)
=
f
(
p
1
c
1
)
⋅
f
(
p
2
c
2
)
⋯
f
(
p
m
c
m
)
=
p
1
c
1
⋅
p
2
c
2
⋯
p
m
c
m
=
n
∴
结
论
成
立
考虑f(n)=\sum_{d\mid n}\varphi(n),试证明当\gcd(n,m)=1时,f(n\cdot m)=f(n)\cdot f(m)\\f(n)\cdot f(m)=\sum_{i\mid n}\varphi(i)\cdot \sum_{j\mid m}\varphi(j)\\\qquad\qquad\quad\,\, =\varphi(i_1)\cdot \varphi(j_1)+\varphi(i_1)\cdot \varphi(j_2)+\varphi(i_1)\cdot \varphi(j_3)\cdots \varphi(i_1)\cdot \varphi(j_m)+\varphi(i_2)\cdot \varphi(j_1)+\varphi(i_2)\cdot \varphi(j_2)\cdots \varphi(i_n)\cdot \varphi(j_m)\\\qquad\qquad\quad\,\,= \varphi(i_1\cdot j_1)+\varphi(i_1\cdot j_2)\cdots+\varphi(i_n\cdot j_m)\\\because gcd(n,m)=1\\\therefore 可以得到,i_1\cdot i_2\cdots i_n\cdot j_m构成了n\cdot m的所有因数\\\therefore \gcd(n,m)=1,f(nm)=f(n)\cdot f(m)\\\,\\\because p为质数,有f(p^k)=\varphi(1)+\varphi(p)+\varphi(p^2)\cdots +\varphi(p^k)=1+(p-1)+(p^2-p)\cdots+(p^k-p^{k-1})=p^k\\\because 任意整数n=p_1^{c_1}\cdot p_2^{c_2}\cdots p_m^{c_m}\\\therefore \forall n\in \Z,f(n)=f(p_1^{c_1}\cdot p_2^{c_2}\cdots p_m^{c_m})=f(p_1^{c_1})\cdot f(p_2^{c_2})\cdots f(p_m^{c_m})=p_1^{c_1}\cdot p_2^{c_2}\cdots p_m^{c_m}=n\\\therefore 结论成立
考虑f(n)=∑d∣nφ(n),试证明当gcd(n,m)=1时,f(n⋅m)=f(n)⋅f(m)f(n)⋅f(m)=∑i∣nφ(i)⋅∑j∣mφ(j)=φ(i1)⋅φ(j1)+φ(i1)⋅φ(j2)+φ(i1)⋅φ(j3)⋯φ(i1)⋅φ(jm)+φ(i2)⋅φ(j1)+φ(i2)⋅φ(j2)⋯φ(in)⋅φ(jm)=φ(i1⋅j1)+φ(i1⋅j2)⋯+φ(in⋅jm)∵gcd(n,m)=1∴可以得到,i1⋅i2⋯in⋅jm构成了n⋅m的所有因数∴gcd(n,m)=1,f(nm)=f(n)⋅f(m)∵p为质数,有f(pk)=φ(1)+φ(p)+φ(p2)⋯+φ(pk)=1+(p−1)+(p2−p)⋯+(pk−pk−1)=pk∵任意整数n=p1c1⋅p2c2⋯pmcm∴∀n∈Z,f(n)=f(p1c1⋅p2c2⋯pmcm)=f(p1c1)⋅f(p2c2)⋯f(pmcm)=p1c1⋅p2c2⋯pmcm=n∴结论成立
性 质 9 若 gcd ( m , a ) = 1 , a φ ( m ) ≡ 1 ( m o d m ) 性质\mathbf{9}\quad\boxed{\color{Red}若\gcd(m,a)=1,a^{\varphi(m)}\equiv1\pmod{m}} 性质9若gcd(m,a)=1,aφ(m)≡1(modm)
证明:
考
虑
一
个
模
m
的
互
质
剩
余
系
{
x
1
,
x
2
,
x
3
⋯
x
φ
(
m
)
}
,
其
中
x
小
于
m
,
且
都
与
m
互
质
。
∵
gcd
(
x
k
,
m
)
=
1
,
gcd
(
a
,
m
)
=
1
∴
gcd
(
a
⋅
x
k
,
m
)
=
1
,
且
a
x
i
两
两
互
质
。
此
时
考
虑
证
明
a
x
i
≢
a
x
j
(
m
o
d
m
)
/
/
考虑一个模m的互质剩余系\{x_1,x_2,x_3\cdots x_{\varphi(m)}\},其中x小于m,且都与m互质。\\\because \gcd(x_k,m)=1,\gcd(a,m)=1\\\therefore \gcd(a\cdot x_k,m)=1,且ax_i两两互质。\\~\\此时考虑证明 ax_i\not\equiv ax_j\pmod m//
考虑一个模m的互质剩余系{x1,x2,x3⋯xφ(m)},其中x小于m,且都与m互质。∵gcd(xk,m)=1,gcd(a,m)=1∴gcd(a⋅xk,m)=1,且axi两两互质。 此时考虑证明axi≡axj(modm)//
若
a
x
i
≡
a
x
j
(
m
o
d
m
)
则
有
m
∣
a
(
x
i
−
x
j
)
∵
gcd
(
m
,
a
)
=
1
∴
m
∣
(
x
i
−
x
j
)
∴
x
i
≡
x
j
(
m
o
d
m
)
与
题
设
不
符
,
顾
原
命
题
a
x
i
≢
a
x
j
(
m
o
d
m
)
/
成
立
若ax_i\equiv ax_j\pmod m\\ 则有 m\mid a(x_i-x_j)\\ \because \gcd(m,a)=1\\ \therefore m\mid (x_i-x_j)\\ \therefore x_i\equiv x_j \pmod m \\ 与题设不符,顾原命题ax_i\not\equiv ax_j\pmod m/成立
若axi≡axj(modm)则有m∣a(xi−xj)∵gcd(m,a)=1∴m∣(xi−xj)∴xi≡xj(modm)与题设不符,顾原命题axi≡axj(modm)/成立
因此有
{
a
x
1
,
a
x
2
.
a
x
3
⋯
a
x
m
}
\{ax_1,ax_2.ax_3\cdots ax_m\}
{ax1,ax2.ax3⋯axm}也是互质同余系,因此利用同模数同余式的合并性质,有
∏
i
=
1
φ
(
m
)
a
x
i
≡
∏
i
=
1
φ
(
m
)
x
i
(
m
o
d
m
)
a
φ
(
m
)
∏
i
=
1
φ
(
m
)
x
i
≡
∏
i
=
1
φ
(
m
)
x
i
(
m
o
d
m
)
a
φ
(
m
)
≡
1
(
m
o
d
m
)
\prod\limits_{i=1}^{\varphi(m)}ax_i\equiv\prod\limits_{i=1}^{\varphi(m)}x_i\pmod m\\ ~\\a^{\varphi(m)}\prod\limits_{i=1}^{\varphi(m)}x_i\equiv\prod\limits_{i=1}^{\varphi(m)}x_i\pmod m\\ ~\\a^{\varphi(m)}\equiv1\pmod m
i=1∏φ(m)axi≡i=1∏φ(m)xi(modm) aφ(m)i=1∏φ(m)xi≡i=1∏φ(m)xi(modm) aφ(m)≡1(modm)
证毕
区间内的欧拉函数求值
由于欧拉函数可以从质因数得到,我们不难想到可以利用埃氏筛和线性筛两种方法求出 [ 1 , n ] [1,n] [1,n]内的欧拉函数值。
- 埃氏筛
在埃氏筛中,每一个数都会被它的质因数筛一遍,我们可以利用这点在埃氏筛中完成欧拉函数求值
我们甚至可以直接用 φ \varphi φ 数组代替标记数组!
#include<bits/stdc++.h>
using namespace std;
int n;
double phi[1000010]={0};
int main()
{
cin>>n;
for(int i=1;i<=n;i++) phi[i]=i;
for(int i=2;i*i<=n;i++)
{
if(phi[i]!=i) continue;
for(int j=2;j*i<=n;j++)
phi[j*i]=phi[j*i]*(i-1)*1.0/(i*1.0);
}
for(int i=1;i<=n;i++)
{
if(phi[i]==i&&i!=1) phi[i]--; //别问我为什么要加这一行,问就是上面那些处理质数有bug……
cout<<phi[i]<<endl;
}
return 0;
}
- 线性筛
另外我们可以发现 性 质 5 \mathbf{性质5} 性质5 的结论仿佛就是为线性筛量身定制的,因此我们也可以通过线性筛使用线性复杂度来求出 [ 1 , n ] [1,n] [1,n] 中的欧拉函数。
#include<bits/stdc++.h>
using namespace std;
int n;
double phi[1000010]={0};
int prime[100010],tot=0;
int main()
{
cin>>n;
for(int i=1;i<=n;i++) phi[i]=i;
for(int i=2;i<=n;i++)
{
if(phi[i]==i)
{
prime[++tot]=i;
phi[i]=i-1;
}
for(int j=1;j<=tot&&i*prime[j]<=n;j++)
{
if(i%prime[j]==0)
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else
{
phi[i*prime[j]]=phi[i]*phi[prime[j]];
}
}
}
for(int i=1;i<=n;i++) cout<<phi[i]<<endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!