線性篩
//歐拉函數
#include<iostream>
#include<cstdio>
using namespace std;
int n,vis[105],prim[105],t;
int main()
{
cin>>n;
for(int i=2;i<=n;i++)
{
if(!vis[i])
{
prim[++t]=i;//prim[1]
}
for(int j=1;j<=t && i*prim[j]<=n;j++)
{
vis[i*prim[j]]=1;//打標記表示不是質數 4%2==0 4*2=8
if(i%prim[j]==0 )break;
}
}
for(int i=1;i<=t;i++)
cout<<prim[i]<<" ";
}
//歐拉函數
#include<iostream>
#include<cstdio>
using namespace std;
int n,vis[105],prim[105],t,PHI[105];
int main()
{
cin>>n;
PHI[1]=1;
for(int i=2;i<=n;i++)
{
if(!vis[i])
{
prim[++t]=i;//prim[1]
PHI[i]=i-1;
}
for(int j=1;j<=t && i*prim[j]<=n;j++)
{
vis[i*prim[j]]=1;//打標記表示不是質數 4%2==0 4*2=8
if(i%prim[j]==0 )
{
PHI[i*prim[j]]=prim[j]*PHI[i];
}
else
PHI[i*prim[j]]=PHI[i]*(prim[j]-1);
}
}
for(int i=1;i<=n;i++)
cout<<PHI[i]<<" ";
}
//莫比烏斯函數
#include<iostream>
#include<cstdio>
using namespace std;
int n,vis[105],prim[105],t,mu[105];
int main()
{
cin>>n;
mu[1]=1;
for(int i=2;i<=n;i++)
{
if(!vis[i])
{
prim[++t]=i;//prim[1]
mu[i]=-1;
}
for(int j=1;j<=t && i*prim[j]<=n;j++)
{
vis[i*prim[j]]=1;//打標記表示不是質數 4%2==0 4*2=8
if(i%prim[j]==0 )
{
mu[i*prim[j]]=0;
}
else
{
mu[i*prim[j]]=mu[i]*(-1);
}
}
}
for(int i=1;i<=n;i++)
cout<<mu[i]<<" ";
}