题意大致就是:给你几个数字,要你算出每个数字的欧拉函数值相加
代码:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int maxn=1e6+10;
int eu[maxn];
int re[maxn];
void solve()
{
bool isprime[maxn];
memset(isprime,true,sizeof isprime);
for(int i=1;i<maxn;i++) eu[i]=i;
eu[1]=0;
for(int i=2;i<maxn;i++)
{
if(isprime[i])
{
for(int j=i;j<maxn;j+=i)
{
isprime[j]=false;
eu[j]-=eu[j]/i;
}
}
}
for(int i=1;i<maxn;i++)
{
for(int j=eu[i];re[j]==0&&j>=0;j--)
{
re[j]=i;
}
}
}
int main()
{
int t;
scanf("%d",&t);
solve();
for(int i=1;i<=t;i++)
{
int n;
scanf("%d",&n);
long long sum=0;
while(n--)
{
int cnt;
scanf("%d",&cnt);
sum+=re[cnt];
}
printf("Case %d: %lld Xukha\n",i,sum);
}
//system("pause");
return 0;
}