积性函数
定义:若 a,b 互质时,有 f(ab)=f(a)∗f(b) ,那么称函数 f 为积性函数。
ps:cbj大佬说所有积性函数都可以用线性筛求值 qwq
欧拉函数
φ(n) 表示比 n 小的与 n 互质的正整数的个数
对 n 做质因数分解,得到 n=p1c1p2c2⋯pmcm 则:
φ(n)=n∗(1−p11)∗(1−p21)∗⋯∗(1−pm1)
证明:
若 n 含有两个不同的质因子 p,q ,
那么在 1 ~ n 中 p 的倍数有 pn 个,q 的倍数有 qn 个,
如果我们把这 pn+qn 个数减掉,
那么 p,q 的共同因子就会被排除两遍,需要加回来一次。
因此 1 ~ n 中不与 n 含有共同因子 p,q 的数的个数为:
n−pn−qn+pqn=n(1−p1)(1−q1)
欧拉函数是积性函数
证明:根据我们得到的式子可得对于两个互质的数 a,b 有
φ(a)φ(b)=a∗质数p∣a∏(1−p)∗b∗质数p∣b∏(1−p)=(a∗b)∗质数p∣(a∗b)∏(1−p)=φ(a∗b)
线性筛求欧拉函数的值 :
需要利用的三条性质:
- 1 若 x 为质数,那么 φ(x)=x−1
- 2 设 p 为质数,若对于一个数 x 有 p∣x 且 p2∣x ,则 φ(x)=φ(x/p)∗p
- 3 设 p 为质数,若对于一个数 x 有 p∣x 但 p2∣x ,则 φ(x)=φ(x/p)∗φ(p)
证明:
第一条性质是显然的
第二条性质可以从公式中得到,因为 x 和 x/p 含有的质因子种类完全一样,所以 φ(x) 和 φ(x/p) 的商由公式可得是 p ,所以 φ(x)=φ(x/p)∗p
第三条性质可以直接由 φ(n) 为积性函数得到
那么我们就可以利用这三条性质,在线性筛的基础上在 Θ(n) 的时间复杂度里求出 1~n 的欧拉函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #define ll long long
ll n,phi[N],prime[N],tot,v[N];
for(int i=2;i<=n;i++){
if(v[i]==0){
prime[tot++]=i;
phi[i]=i-1;
v[i]=i;
}
for(int j=0;j<tot;j++){
if(v[i]<prime[j]||prime[j]*i>n)break;
v[i*prime[j]]=prime[j];
if(i%prime[j])phi[i*prime[j]]=phi[i]*phi[prime[j]];
else phi[i*prime[j]]=phi[i]*prime[j];
}
}
|
欧拉定理
aφ(n)≡1(modn)(a⊥n)
证明:
aφ(n)x1x2x3⋯xφ(n)(modn)(1)
≡(ax1)(ax2)⋯(axφ(n))(modn)(2)
因为 a⊥n , 所以 xi⊥n ,所以 axi⊥n ,所以 aximodm 属于 n 的简化剩余系,
因为 {x1,x2,x3⋯xφ(n)} 正好构成了 n 的简化剩余系,又有对于任意不相等的 xi,xj 存在若 a⊥n 那么 axi≡axj(modn)
所以,对构成 n 的简化剩余系的元素分别乘上 a ,得到的数恰好又构成 n 的简化剩余系,
即上面的式子等价于:
x1x2x3⋯xφ(n)(modn)(3)
对(1)、(3)式两边同除 x1x2x3⋯xφ(n) 可得:
aφ(n)≡1(modn)
证毕。
可以发现其实费马小定理就是欧拉定理的特例,因为当p为质数时,φ(p)=p−1
扩展:
ab≡abmodφ(n)(modn)(a⊥n)
证明:设 b=q∗φ(n)+r ,其中 0≤r<φ(n) ,即 r=bmodφ(n) ,于是:
ab≡aq∗φ(n)+r≡1q∗ar≡ar≡abmodφ(n)(modn)
证毕
这个欧拉定理的小扩展可以帮我们有效降幂,但是他显然还不够一般,为了可以更方便的降幂,我们有:
扩展欧拉定理
ab≡a(bmodφ(c))+φ(c)(modc)
证明:
我们可以考虑对 a 做质因数分解,
对于 a 的质因数中与 c 互质的 p 因为欧拉定理显然符合上式,
对于 p∣c ,我们可以先把 c 拆成 s∗pr ,其中 s 与 p 互质,因为pφ(s)≡1(mods),因为欧拉函数为积性函数,所以 φ(s)∗φ(pr)=φ(c) ,那么显然有
pφ(c)≡1(mods)
从而
pb≡pbmodφ(c)(mods)
两边同乘 pr,因为 c=s∗pr,所以
pb+r≡p(bmodφ(c))+r(modc)
因为 c=s∗pr,所以 φ(c)≥r,所以可以对两边同乘 pφ(c)−r
pb≡p(bmodφ(c))+φ(c)(modc)
证毕