Lightoj1007【欧拉函数-素数表】

基础题。

PS:注意unsigned long long; 以及%llu

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ULL;
typedef long long LL;
 
const int N=5e6+10;
bool isprime[N];
ULL res[N];
void init()
{
    res[1]=1ULL;
    for(LL i=1;i<=5000000;i++)
    {
        isprime[i]=true;
        res[i]=i;
    }
    for(LL i=2;i<=5000000;i++)
    {
        if(!isprime[i]) continue;
        res[i]=res[i]*(i-1)/i;
        for(LL j=i+i;j<=5000000;j+=i)
        {
            isprime[j]=false;
            res[j]=res[j]*(i-1)/i;
        }
    }
    for(int i=2;i<=5000000;i++)
        res[i]=res[i]*res[i]+res[i-1];
}
 
int main()
{
    int T,cas=1,a,b;
    init();
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&a,&b);
        printf("Case %d: %llu
",cas++,res[b]-res[a-1]);   
    }
    return 0;
}



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