基础题。
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; }