欧拉筛法&欧拉函数
1.欧拉筛法
1. 原理
通过枚举一个1~n的数和已筛出的质数,他们的积为一个合数
2. 代码实现
for(int i=2;i<=n;i++){
if(!vis[i]) prime[++tot]=i;
for(int j=1;j<=tot;j++){
if(1ll*i*prime[j]>n) break;//大于时退出
vis[i*prime[j]]=1;//质数的倍数不是质数
if(i%prime[j]==0) break; //!!!重要优化
//令i=k*prime[j] 则 i*prime[j+x] 在i枚举到 k*prime[j+x]时
//即会被筛去,为了防止重复筛除, break 掉;
}
}
2. 欧拉函数
1. 理论知识
1. 定义: 欧拉函数 φ ( x ) \varphi(x) φ(x) 为小于等于 x x x且与 x x x互质的数的个数
2. 重要性质
○1. φ ( p ) = p − 1 \varphi(p)=p-1 φ(p)=p−1( p p p是质数).
○2. φ ( x ) \varphi(x) φ(x)为积性函数 即 φ ( p ∗ q ) = φ ( p ) ∗ φ ( q ) \varphi (p*q)= \varphi (p)*\varphi (q) φ(p∗q)=φ(p)∗φ(q) 其中 p,q互质 .
○3. φ ( p k ) = ( p − 1 ) p k − 1 \varphi (p^k)=(p-1)\ p^{k-1} φ(pk)=(p−1) pk−1 (p是质数).
○4.当p为质数且 p ∣ x p|x p∣x时, φ ( x ∗ p ) = φ ( x ) ∗ p \varphi (x*p)=\varphi (x)*p φ(x∗p)=φ(x)∗p
○5.设n是一个正整数, ∑ d ∣ n φ ( d ) = n \sum_{d|n}\varphi(d)=n ∑d∣nφ(d)=n
○6.设 1 < = k < = n 1<=k<=n 1<=k<=n,那么有 ∑ ( k , n ) = 1 k = 1 2 n φ ( n ) \sum_{(k,n)=1}k=\frac12n\varphi(n) ∑(k,n)=1k=21nφ(n)
○7.若a与n互质,那么若 a n ≡ b ( m o d    p ) a^n\equiv b (mod\;p) an≡b(modp)则 a n    m o d    φ ( p ) ≡ b ( m o d    p ) a^{n\;mod\;\varphi(p)}\equiv b(mod\;p) anmodφ(p)≡b(modp)(由欧拉定理易得)
○8.若 a n ≡ b ( m o d    p ) a^n\equiv b (mod\;p) an≡b(modp)则 a n    m o d    φ ( p ) + φ ( p ) ≡ b ( m o d    p ) a^{n\;mod\;\varphi(p)+\varphi(p)} \equiv b(mod\;p) anmodφ(p)+φ(p)≡b(modp)扩展欧拉定理(不要求a和p互质)
性质3的证明:
∵ p k \because p^k ∵p