1.筛法求maxn内所有素数
#define maxn 50000
bool iscomp[maxn]={0};
int p[maxn]={0}; //存素数
int pcnt=0; //素数个数
void seive()
{
for(int i=2;i<maxn;i++)
{
if(!iscomp[i]) //没被筛走的就是素数
p[pcnt++]=i;
for(int j=0;j<pcnt&&i*p[j]<maxn;j++) //筛掉它的倍数
{
iscomp[i*p[j]]=1;
if(i%p[j]==0)
break;
}
}
}
2.欧拉函数打表
(1)欧拉函数:小于等于n的数中与n互质的数的数目(包含1)
(2)打表法:
#define N 50002
int euler[N];
void Init()
{
for(int i=0;i<=N;i++)
euler[i]=i;
for(int i=2;i<=N;i++)
{
if(euler[i]==i)
{
euler[i]=euler[i]/i*(i-1);
for(int j=i+i;j<=N;j+=i)
euler[j]=euler[j]/i*(i-1);
}
}
}