///素数打表
void getprime()
{
memset(prime,0,sizeof(prime));
for(int i=2;i<=maxn;i++)
{
if(!prime[i]) prime[flag++]=i;
for(int j=1;j<flag;j++)
{
if(i*prime[j]>=maxn) break;
prime[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
}
///单个数的欧拉函数值,结合素数表进行运动
int ac(int n)
{
int ans=n;
if(n==1) return 0;
for(int i=1;i<flag&&prime[i]<=n;i++)
{
if(n%prime[i]==0)
{
ans=ans/prime[i]*(prime[i]-1);
while(n%prime[i]==0) n/=prime[i];
}
}
if(n>1) ans=ans/n*(n-1);
return ans;
}
///单独的求某个数的欧拉函数值
int ac(int n)
{
int ans=n;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
ans=ans/i*(i-1);
while(n%i==0) n/=i;
}
}
if(n>1) ans=ans/n*(n-1);
return ans;
}
///欧拉函数值的打表
void getphi()
{
memset(phi,0,sizeof(phi));
phi[1]=1;
for(int i=2;i<=maxn;i++)
{
if(!phi[i])
{
for(int j=i;j<=maxn;j+=i)
{
if(!phi[j]) phi[j]=j;
phi[j]=phi[j]/i*(i-1);
}
}
}
}
素数 euler
最新推荐文章于 2020-08-10 15:11:06 发布