预先处理好phi数组和前缀和,水题。
#include<cstdio> #include<string> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int MAXN = 5e6+10; unsigned long long int phi[MAXN]; void init(){ 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(i == phi[i]){ for(int j = i;j < MAXN;j += i) phi[j] = (phi[j]*(i-1)/i); } } for(int i = 1;i < MAXN;i ++) phi[i] = phi[i-1] + phi[i]*phi[i]; } int main(){ init(); int t, a, b, CASE(0); scanf("%d", &t); while(t--){ scanf("%d%d", &a, &b); printf("Case %d: ", ++CASE); printf("%llu ",phi[b]-phi[a-1] ); } return 0; }