LightOJ1370 Bi-shoe and Phi-shoe(欧拉函数+打表)

题意:

Φ (n)表示长度为小于数字n的和n互质的数的个数,也就是欧拉函数。现在给出n个幸运数字,对于每一个幸运数字,要求的x,使Φ (n)的值大于等于这个幸运数字,求这些x和的最小值。

题解:

打表后暴力

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+100;
int E[maxn];//存每个数的欧拉函数
int ispr[maxn];//存素数
int a[maxn],n;
void eular () {
    for (int i=1;i<maxn;i++) E[i]=i;
    memset(ispr,1,sizeof(ispr));
    ispr[0]=ispr[1]=0;
    E[1]=0;
    for (int i=2;i<maxn;i++) if (ispr[i]) for (int j=i;j<maxn;j+=i) ispr[j]=0,E[j]-=E[j]/i;
}  
int main () {
    eular();
    int T;
    scanf("%d",&T);
    for (int k=1;k<=T;k++) {
        memset(a,0,sizeof(a));
        long long ans=0;
        scanf("%d",&n);
        for (int i=1;i<=n;i++) scanf("%d",a+i);
        sort(a+1,a+n+1);
        int p=1;
        for (int i=1;i<=n;i++) for (int j=p;j<maxn;j++) if (E[j]>=a[i]) {
            ans+=j;p=j;break;
        }
        printf("Case %d: %lld Xukha\n",k,ans);
    } 
}

 

posted @ 2020-10-04 21:49  zlc0405  阅读(133)  评论(0编辑  收藏  举报