欧拉线性筛 与 欧拉函数 + 几道例题
欧拉线性筛
生成素数表prime[]数组
const int maxn = 1e7+5;
int prime[maxn];
int visit[maxn];
void Prime(){
memset(visit,0,sizeof(visit));
memset(prime, 0,sizeof(prime));
for (int i = 2;i <= maxn; i++) {
if (!visit[i]) {
prime[++prime[0]] = i;
}
for (int j = 1; j <=prime[0] && i*prime[j] <= maxn; j++) {
visit[i*prime[j]] = 1;
if (i % prime[j] == 0) {
break;
}
}
}
}
欧拉函数
欧拉函数:与n互质的数(<n)个数
欧拉线性筛求欧拉函数
const int maxn = 1e7+5;
int prime[maxn]; //素数表
int phi[maxn]; // phi[]数组就是1~maxn的欧拉函数值
int visit[maxn];
//欧拉线性筛 求 欧拉函数
void init(){
for(int i=2;i<=maxn;i++){
if(!visit[i]){
prime[++cnt]=i;
phi[i]=i-1;//质数直接能求出
}
for(int j=1;j<=cnt&&prime[j]*i<=maxn;j++){
visit[i*prime[j]] = 1;
if(i%prime[j]==0){
phi[i*prime[j]]=phi[i]*prime[j];//px不互质
break;
}
else phi[i*prime[j]]=phi[i]*(prime[j]-1);//px互质
}
}
}
例题一:蓝桥杯2018年决赛-矩阵求和
思路:欧拉线性筛求欧拉函数 点击这里查看详解
例题二:2018年南京网络赛-sum
做题地址:https://nanti.jisuanke.com/t/A1956
题解地址1:https://blog.csdn.net/baiyifeifei/article/details/82290007
题解地址2:https://blog.csdn.net/qq_37451344/article/details/82290901
本文参考至:
https://blog.csdn.net/qq_39763472/article/details/82428602
https://blog.csdn.net/bojack_/article/details/78313778