题目不难,欧拉函数打表,做的时候要用long long,用int wa了好几发
#include <cstdio> #include <cstring> typedef long long ll; ll euler[1000010]; void getEuler() { memset(euler,0,sizeof(euler)); euler[1] = 1; for(ll i = 2; i <= 1000005; i++) if(!euler[i]) for(ll j = i; j <= 1000005; j += i) { if(!euler[j]) euler[j] = j; euler[j] = euler[j]/i*(i-1); } } const int MAXN = 10010; ll num; int main() { int T,n,index,time = 0; ll res; getEuler(); scanf("%d",&T); while(T--) { ++time; res = 0; scanf("%d",&n); for(int i = 0; i < n; ++i) { scanf("%d",&num); index = num+1; while(euler[index] < num) ++index; res += index; } printf("Case %d: %lld Xukha\n",time,res); } return 0; }