Bi-shoe and Phi-shoe LightOJ - 1370

题意:给一些数Ai(第 i 个数),Ai代表的是某个数欧拉函数的值,我们要求出数 Ni 的欧拉函数值不小于Ai。而我们要求的就是这些 Ni 这些数字的和sum,而且我们想要sum最小,求出sum最小多少。
思路: 要求和最小,我们可以让每个数都尽量小,那么我们最后得到的肯定就是一个最小值。给定一个数的欧拉函数值ψ(N),我们怎么样才能求得最小的N?我们知道,一个素数P的欧拉函数值ψ(P)=P-1。所以如果我们知道ψ(N),那么最小的N就是最接近ψ(N),并且大于ψ(N)的素数。我们把所有素数打表之后再判断就可以了。
AC代码:
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1e6+10;
typedef long long ll;
int book[maxn];
void init()
{
    memset(book,0,sizeof(book));
    for(int i = 2; i <= maxn; i++)
    {
        if(book[i]==0)
            for(int j = i+i; j <= maxn; j += i)
                book[j] = 1;
    }
}
int main(void)
{
    init();
    int t;
    scanf("%d",&t);
    for(int i = 1; i <= t; i++)
    {
        int n;
        cin>>n;
        ll sum = 0;
        while(n--)
        {
            int x;
            cin>>x;
            for(int i = x+1; ; i++)
            {
                if(book[i]==0)
                {
                    sum += i;
                    break;
                }
            }
        }
        printf("Case %d: %lld Xukha\n",i,sum);
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/AC-AC/p/9937174.html