1-N中与N互质的数的个数
for(int i=0;i<n;++i)
{
int mid,ans,sum;
scanf("%d",&sum);
mid=sqrt(sum);
ans=sum;
for(int j=2;j<=mid;++j)
{
if(sum%j!=0)
continue;
ans-=ans/j;
while(sum%j==0)
sum/=j;
}
if(sum!=1)
ans-=ans/sum;
cout<<ans<<endl;
}
线性筛求欧拉函数
int er[2048],id=0,p[2048],s[2048];
void eurle()//����ɸO(n)
{
for(int i=2;i<1001;++i)
{
if(!s[i])
{
er[i]=i-1;
p[id++]=i;
}
for(int j=0;p[j]*i<1001;++j)
{
s[p[j]*i]=1;
if(i%p[j]==0)
{
er[i*p[j]]=er[i]*p[j];
break;
}
else
er[i*p[j]]=er[i]*(p[j]-1);
}
}
}
本文介绍了一种计算1到N中与N互质的数的个数的方法,通过线性筛求欧拉函数实现,提高了计算效率。首先介绍了基本算法流程,然后详细展示了代码实现细节。
349

被折叠的 条评论
为什么被折叠?



