FZU 1969数论 GCD+欧拉函数应用

来源:互联网 发布:结构优化是什么意思 编辑:程序博客网 时间:2024/06/05 07:33

此题非常好...题解我再写一个详细的证明过程,随后发出来


写贴代码:

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define lint long longconst int maxn = 1000015;int phi[maxn];lint sum[maxn];void Phi(){    int i,j,k;    phi[0]=sum[0]=0;    for(i = 1; i <= maxn; i++) phi[i] = i;    for(i = 2; i <= maxn; i += 2) phi[i] /= 2;    for(i = 3; i <= maxn; i += 2) if(phi[i] == i) {        for(j = i; j <= maxn; j += i)            phi[j] = phi[j] / i * (i - 1);    }    for(i=2;i<maxn;i++)        sum[i]=phi[i];    for(i=2;i<=1000;i++)//每次循环处理掉所有的以i为gcd的情况    {        sum[i*i]+=phi[i]*i;        for(j=i*i+i,k=i+1;j<maxn;j+=i,k++)//k记录多少个i,省却除法的时间        {            sum[j]+=phi[k]*i+phi[i]*k;        }    }    for(i=1;i<maxn;i++)        sum[i]+=sum[i-1];}int main(){    Phi();    lint n,g;    while(scanf("%I64d", &n)!=EOF && n)    {        printf("%I64d\n",sum[n]);    }    return 0;}


1 0