一个法雷序列fn中数的个数就是分别与2,3,4,5,6…..n-1,n互素的数的个数和,继而就是求从2到n连续的欧拉函数值的和
#include<iostream>
#define maxn 1000000
using namespace std;
long long a[maxn+1];
int main()
{
int i,j;
for(i=1;i<=maxn;i++)
a[i]=i;
for(i=2;i<=maxn;i+=2)
a[i]/=2;
for(i=3;i<=maxn;i+=2)
if(a[i]==i)
{
for(j=i;j<=maxn;j+=i)
a[j]=a[j]/i*(i-1);
}
for(int i=3;i<=maxn;i++)
a[i]+=a[i-1];
int n;
while(scanf("%d",&n)!=EOF && n)
{
printf("%I64d\n",a[n]);
}
return 0;
}
本文介绍了如何通过高效算法计算法雷序列中与2到n连续整数互素的数的个数总和,具体涉及欧拉函数的应用,并通过C++代码实现。
931

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



