标签:int typedef 欧拉 namespace names using ace std name
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e7+5;
int p[N],oa[N];
bool vis[N];
int oula(int n)
{
memset(vis,0,sizeof(vis));
oa[1]=1;
int cnt=1;
for(int i=2;i<=n;i++)
{
if(!vis[i])
{
p[cnt++]=i;
oa[i]=i-1;
}
for(int j=1;j<cnt&&p[j]*i<=n;j++)
{
vis[i*p[j]] = 1;
if(i%p[j]==0) {
oa[i*p[j]]=oa[i]*p[j];//该合数的所有质因子p[j]出现了两次以上
break;//若prime[j]在这个合数里出现了不止一次(i%prime[j]=0),
//也就是这个合数的所有质因子都在i里出现过
}
oa[i*p[j]]=oa[i]*(p[j]-1);
}
}
return cnt-1;
}
int main()
{
int n;
while(cin>>n)
{
int al=oula(n);
for(int i=1;i<=al;i++)
cout<<p[i]<<" \n"[i==al];
for(int i=1;i<=n;i++)
cout<<oa[i]<<" \n"[i==n];
}
return 0;
}
标签:int typedef 欧拉 namespace names using ace std name
原文地址:https://www.cnblogs.com/mch5201314/p/11296255.html