HDU2824【欧拉函数性质】

思路:
打表。
利用公式。
类似素数打表一样。


#include<bits/stdc++.h>
using namespace std;

const int N=3e6+10;

bool isPrime[N];
long long res[N];

void init()
{
    res[1]=1;
    memset(isPrime,true,sizeof(isPrime));
    for(long long i=2;i<=3000000;i++)
        res[i]=i;
    for(long long i=2;i<=3000000;i++)
    {
        if(!isPrime[i]) continue;
        res[i]=res[i]*(i-1)/i;
        for(long long j=i+i;j<=3000000;j+=i)
        {
            isPrime[j]=false;
            res[j]=res[j]*(i-1)/i;
        }
    }
    for(int i=2;i<=3000000;i++)
        res[i]+=res[i-1];
}

int main()
{
    init();
    int a,b;
    while(~scanf("%d%d",&a,&b))
        printf("%lld
",res[b]-res[a-1]);
    return 0;
}


原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777452.html