积性函数

定义:若 a,ba,b 互质时,有 f(ab)=f(a)f(b)f(ab)=f(a)*f(b) ,那么称函数 ff 为积性函数。

pspscbjcbj大佬说所有积性函数都可以用线性筛求值 qwqqwq

欧拉函数

φ(n)\varphi(n) 表示比 nn 小的与 nn 互质的正整数的个数

nn 做质因数分解,得到 n=p1c1p2c2pmcmn=p_1^{c_1}p_2^{c_2}\cdots p_m^{c_m} 则:

φ(n)=n(11p1)(11p2)(11pm)\varphi(n)=n*(1-{1\over p_1})*(1-{1\over p_2})*\cdots *(1-{1\over p_m})

证明:

nn 含有两个不同的质因子 p,qp,q ,

那么在 11 ~ nnpp 的倍数有 np\cfrac {n}{p} 个,qq 的倍数有 nq\cfrac {n}{q} 个,

如果我们把这 np+nq\cfrac {n}{p}+\cfrac {n}{q} 个数减掉,

那么 p,qp,q 的共同因子就会被排除两遍,需要加回来一次。

因此 11 ~ nn 中不与 nn 含有共同因子 p,qp,q 的数的个数为:

nnpnq+npq=n(11p)(11q)n-\cfrac {n}{p}-\cfrac {n}{q}+\cfrac {n}{pq}=n(1-{1\over p})(1-{1\over q})

欧拉函数是积性函数

证明:根据我们得到的式子可得对于两个互质的数 a,ba,b

φ(a)φ(b)=a质数pa(1p)b质数pb(1p)=(ab)质数p(ab)(1p)=φ(ab)\varphi(a)\varphi(b)=a*\prod_{质数p\mid a}(1-p)*b*\prod_{质数p\mid b}(1-p)=(a*b)*\prod_{质数p\mid (a*b)}(1-p)=\varphi(a*b)

线性筛求欧拉函数的值 :

需要利用的三条性质:

  • 1 若 xx 为质数,那么 φ(x)=x1\varphi(x)=x-1
  • 2 设 pp 为质数,若对于一个数 xxpxp\mid xp2xp^2\mid x ,则 φ(x)=φ(x/p)p\varphi(x)=\varphi(x/p)*p
  • 3 设 pp 为质数,若对于一个数 xxpxp\mid xp2∤xp^2\not\mid x ,则 φ(x)=φ(x/p)φ(p)\varphi(x)=\varphi(x/p)*\varphi(p)

证明:

第一条性质是显然的

第二条性质可以从公式中得到,因为 xxx/px/p 含有的质因子种类完全一样,所以 φ(x)\varphi(x)φ(x/p)\varphi(x/p) 的商由公式可得是 pp ,所以 φ(x)=φ(x/p)p\varphi(x)=\varphi(x/p)*p

第三条性质可以直接由 φ(n)\varphi(n) 为积性函数得到

那么我们就可以利用这三条性质,在线性筛的基础上在 Θ(n)\Theta(n) 的时间复杂度里求出 11~nn 的欧拉函数

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)(an)a^{\varphi(n)}\equiv1\pmod n\quad\quad (a\bot n)

证明:

aφ(n)x1x2x3xφ(n)(modn)(1)a^{\varphi(n)}x_1x_2x_3\cdots x_{\varphi(n)}\pmod n \tag{1}

(ax1)(ax2)(axφ(n))(modn)(2)\equiv (ax_1)(ax_2)\cdots(ax_{\varphi(n)})\pmod n \tag{2}

因为 ana\bot n , 所以 xinx_i\bot n ,所以 axinax_i\bot n ,所以 aximodmax_i \mod m 属于 nn 的简化剩余系,

因为 {x1,x2,x3xφ(n)x_1,x_2,x_3\cdots x_{\varphi(n)}} 正好构成了 nn 的简化剩余系,又有对于任意不相等的 xi,xjx_i,x_j 存在若 ana\bot n 那么 axi≢axj(modn)ax_i\not\equiv ax_j\pmod n

所以,对构成 nn 的简化剩余系的元素分别乘上 aa ,得到的数恰好又构成 nn 的简化剩余系,

即上面的式子等价于:

x1x2x3xφ(n)(modn)(3)x_1x_2x_3\cdots x_{\varphi(n)}\pmod n \tag{3}

对(1)、(3)式两边同除 x1x2x3xφ(n)x_1x_2x_3\cdots x_{\varphi(n)} 可得:

aφ(n)1(modn)a^{\varphi(n)}\equiv1\pmod n

证毕。

可以发现其实费马小定理就是欧拉定理的特例,因为当p为质数时,φ(p)=p1\varphi(p)=p-1

扩展:

ababmodφ(n)(modn)(an)a^{b}\equiv a^{b\mod\varphi(n)}\pmod n\quad\quad (a\bot n)

证明:设 b=qφ(n)+rb=q*\varphi(n)+r ,其中 0r<φ(n)0\leq r<\varphi(n) ,即 r=bmodφ(n)r=b \mod\varphi(n) ,于是:

abaqφ(n)+r1qararabmodφ(n)(modn)a^b\equiv a^{q*\varphi(n)+r}\equiv1^q*a^r\equiv a^r\equiv a^{b \mod\varphi(n)}\pmod n

证毕

这个欧拉定理的小扩展可以帮我们有效降幂,但是他显然还不够一般,为了可以更方便的降幂,我们有:

扩展欧拉定理

aba(bmodφ(c))+φ(c)(modc)a^b \equiv a^{(b\mod\varphi(c))+\varphi(c)}\pmod c

证明:

我们可以考虑对 aa 做质因数分解,

对于 aa 的质因数中与 cc 互质的 pp 因为欧拉定理显然符合上式,

对于 pcp\mid c ,我们可以先把 cc 拆成 sprs*p^r ,其中 sspp 互质,因为pφ(s)1(mods)p^{\varphi(s)}\equiv 1\pmod s,因为欧拉函数为积性函数,所以 φ(s)φ(pr)=φ(c)\varphi(s)*\varphi(p^r)=\varphi(c) ,那么显然有

pφ(c)1(mods)p^{\varphi(c)}\equiv1\pmod s

从而

pbpbmodφ(c)(mods)p^{b}\equiv p^{b\mod\varphi(c)}\pmod s

两边同乘 prp^r,因为 c=sprc=s*p^r,所以

pb+rp(bmodφ(c))+r(modc)p^{b+r}\equiv p^{(b\mod\varphi(c))+r}\pmod c

因为 c=sprc=s*p^r,所以 φ(c)r\varphi(c)\ge r,所以可以对两边同乘 pφ(c)rp^{\varphi(c)-r}

pbp(bmodφ(c))+φ(c)(modc)p^{b}\equiv p^{(b\mod\varphi(c))+\varphi(c)}\pmod c

证毕