线性筛选同时得到欧拉函数表和素数表

来源:互联网 发布:淘宝c店未来发展 编辑:程序博客网 时间:2024/06/08 18:52
///线性筛选同时得到欧拉函数和线性表数据量可以达到1e7;///其实都是引用了素数筛的原理(第二个o根号n的算法)const int maxn=1e7+7;bool isprime[maxn];int tot,prime[maxn],phi[maxn];///素数表和每个数的欧拉函数值///tot为素数的个数void get_phi_prime(){    memset(isprime,true,sizeof(isprime));    isprime[0]=isprime[1]=false;    phi[1]=1;tot=0;    for(int i=2;i<=maxn;i++)    {        if(isprime[i]){prime[++tot]=i;phi[i]=i-1;}        for(int j=1;j<=tot;j++)        {            if(prime[j]*i>=maxn) break;            isprime[i*prime[j]]=false;            if(i%prime[j]!=0) phi[i*prime[j]]=phi[i]*(prime[j]-1);            else {phi[i*prime[j]]=phi[i]*prime[j];break;}        }    }}
原创粉丝点击