#include<cstdio>
#include<algorithm>
#include<vector>
#define maxn 10000005
using namespace std;
long long n,phi[maxn];
int siz;
bool vis[maxn];
vector<int>prime;
int main(){
scanf("%lld",&n);
phi[1]=1;
for(int i=2;i<=n;i++){
if(!vis[i]) prime.push_back(i),siz++,phi[i]=i-1;
for(int j=0;j<siz && i*prime[j]<=n;j++)
{
vis[i*prime[j]]=1;
if(i%prime[j]==0){
phi[i*prime[j]] = prime[j] * phi[i];
break;
}
else
phi[i*prime[j]] = prime[j] * phi[i] - phi[i];
}
}
bool flag=0;
for(int i=1;i<=n;i++)
printf("%d ",phi[i]);
}
筛法求欧拉函数(线性)
最新推荐文章于 2023-04-28 18:06:13 发布