欧拉函数 - Bi-shoe and Phi-shoe - LightOJ - 1370
题意:
Input
Output
Sample Input
3
5
1 2 3 4 5
6
10 11 12 13 14 15
2
1 1
Sample Output
Case 1: 22 Xukha
Case 2: 88 Xukha
Case 3: 4 Xukha
分析:
注意:
代码:
#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N=1e6+10;
int T,n;
int primes[N],phi[N],cnt;
bool st[N];
int a[10010];
void get_prime(int n)
{
phi[1]=0;
for(int i=2;i<=n;i++)
{
if(!st[i])
{
primes[cnt++]=i;
phi[i]=i-1;
}
for(int j=0;primes[j]*i<=n;j++)
{
int p=primes[j];
st[p*i]=true;
if(i%p==0)
{
phi[i*p]=p*phi[i];
break;
}
else phi[i*p]=(p-1)*phi[i];
}
}
}
int main()
{
get_prime(N-1);
int T;
cin>>T;
for(int t=1;t<=T;t++)
{
cin>>n;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+n+1);
ll res=0;
int last=1;
for(int i=1;i<=n;i++)
{
for(int j=last;j<N;j++)
if(phi[j]>=a[i])
{
last=j;
res+=j;
break;
}
}
printf("Case %d: %lld Xukha\n",t,res);
}
return 0;
}