题目链接: https://vjudge.net/problem/LightOJ-1370
题目描述:
给出一些数字,对于每个数字找到一个欧拉函数值大于等于这个数的数,求找到的所有数的最小和。
知识点:
欧拉函数:https://baike.baidu.com/item/%E6%AC%A7%E6%8B%89%E5%87%BD%E6%95%B0/1944850?fr=aladdin
/*
* x的欧拉函数值:小于x且与x互质的数的个数
* 性质:素数p的欧拉函数值为p-1;
*/
#include<cstdio>
#include <cstring> using namespace std; const int N = 1e6 + ;
bool prime[N] = {,,}; //素数打表
//用被判断的数做下标,直接判断一个数是不是素数.
void bool_prime()
{
for(int i=;i<N;i++)
if(!prime[i])
{
for(int j=i+i;j<=N;j+=i)
prime[j] = ;
}
} int main() {
int T,n,x,flag = ;
long long sum;
bool_prime();
for(scanf("%d",&T);T>;T--)
{
scanf("%d",&n);
sum = ;
while(n--)
{
scanf("%d",&x);
for(int i=x+;;i++)
if(!prime[i])
{
sum += i;
break;
}
}
printf("Case %d: %lld Xukha\n",flag++,sum);
}
return ;
}