什么是欧拉函数
欧拉函数是小于x的整数中与x互质的数的个数,一般用φ(x)表示。特殊的,φ(1)=1。
推荐的网站1:https://blog.youkuaiyun.com/zxwsbg/article/details/81488956
推荐的网站2:https://blog.youkuaiyun.com/liuzibujian/article/details/81086324
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int prime[maxn],phi[maxn],cnt=0;
bool vis[maxn];
void init(){
phi[1]=1;
for(int i=2;i<maxn;i++){
if(!vis[i]){
prime[cnt++]=i;
phi[i]=i-1;
}
for(int j=0;j<cnt&&i*prime[j]<maxn;j++){
vis[i*prime[j]]=1;
if(i%prime[j]==0){
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
}
int main(){
init();
for(int i=1;i<=20;i++) cout<<i<<"的欧拉函数值:"<<phi[i]<<endl;
}
简单的来说(不考虑1的情况下):
任何素数的欧拉函数值=该素数的大小-1;
即Eular【prime[j]】=prime[j]-1;
然后我们利用素数筛法,通过素数来下文章。
如果一个数i 可以整除 另一个质数prime[j],那么phi[prime[j]*i]=phi[i]*prime[j];
例如 i=6,prime[j]=3,则phi[18]=phi[6]*3=6。
如果一个数i 不可以整除 另一个质数prime[j],那么phi[prime[j]*i]=phi[i]*phi[prime[j]]=phi[i] *(prime[j]-1)
欧拉函数φ(x)定义为小于x且与x互质的整数数量。对于素数,φ(p)=p-1;利用素数筛法,若i能被质数prime[j]整除,则φ(prime[j]*i)=φ(i)*prime[j];否则,φ(prime[j]*i)=φ(i)*(prime[j]-1)。了解更多详情可参考推荐的优快云博客链接。
1287

被折叠的 条评论
为什么被折叠?



