转载的师哥的 ,,
素数打表:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int M=1e6;
int check[M+50];
int prime[M+50];
int len=0;
void init()
{
int i,j;
for(i=2; i*i<=M; i++)
{
if(!check[i])
{
for(j=i*i; j<M; j+=i)
check[j]=1;//1代表非素数,0代表素数
}
}
check[1]=1;
for(i=1; i<=M; i++)
{
if(!check[i])
{
prime[++len]=i;
}
}
}
int main()
{
init();
int n;
cin>>n;//输出前n个素数
for(int i=1; i<=n; i++)
cout<<prime[i]<<endl;
}
欧拉函数(看不懂):
#include<iostream>
using namespace std;
int euler(int n)
{
int ans=n,a=n;
for(int i=2;i*i<=a;i++)
{
if(a%i==0)
{
ans=ans/i*(i-1);
while(a%i==0)
a/=i;
}
}
if(a>1)
ans=ans/a*(a-1);
return ans;
}
int main()
{
int T;
cin>>T;
while(T--)
{
int x;
cin>>x;
cout<<euler(x)<<endl;
}
}