POJ2478 Farey Sequence

来源:互联网 发布:淘宝找人代付安全吗 编辑:程序博客网 时间:2024/06/04 18:56

欧拉函数

题目传送门

观察一下式子即可发现,F(n)的个数即为φ(n)。而题目要我们求ni=1F(n),即相当于求ni=1φ(n)。利用递推式先算出φ(1)φ(n),再前缀和处理即可。

代码:

#include<cstdio>#include<cstring>#include<algorithm>#define MAXN 1000000using namespace std;typedef long long LL;LL n,phi[MAXN+5];//注意答案是会爆int的void Make(){//递推及前缀和    for (int i=1;i<=MAXN;i++) phi[i]=i;    for (int i=2;i<=MAXN;i+=2) phi[i]/=2;    for (int i=3;i<=MAXN;i+=2)//递推        if (phi[i]==i)             for (int j=i;j<=MAXN;j+=i)                phi[j]=phi[j]/i*(i-1);    for (int i=3;i<=MAXN;i++) phi[i]+=phi[i-1];//前缀和}int main(){    Make();    while (scanf("%lld",&n)&&n)        printf("%lld\n",phi[n]);    return 0;}
原创粉丝点击