• LightOJ


    题意:给N个数,求对每个数ai都满足最小的phi[x]>=ai的x之和。

    分析:先预处理出每个数的欧拉函数值phi[x]。对于每个数ai对应的最小x值,既可以二分逼近求出,也可以预处理打表求。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int maxn = 1100005;
    int phi[maxn];
    int res[maxn];
    bool isprime[maxn];
    
    void Euler(){             //欧拉函数筛
        for(int i=1;i<maxn;++i) phi[i] = i;
        memset(isprime,1,sizeof(isprime));
        isprime[0] = isprime[1] = false;
        phi[1] =0;
        for(int i=2;i<maxn;++i){
            if(!isprime[i]) continue;
            for(int j=i;j<maxn;j+=i){
                isprime[j] = false;
                phi[j] -= phi[j]/i;
            }
        }
    }
    
    void pre(){
        memset(res,0,sizeof(res));
        for(int i=1;i<maxn;++i){
            for(int j=phi[i];j>=0 && res[j]==0;--j){
                res[j] = i;
            }
        }
    }
    
    int main()
    {
        #ifndef ONLINE_JUDGE
            freopen("in.txt","r",stdin);
            freopen("out.txt","w",stdout);
        #endif
        int T,N,a,cas=1;
        Euler();
        pre();
        scanf("%d",&T);
        while(T--){
            scanf("%d",&N);
            LL sum=0;
            for(int i=0;i<N;++i){
                scanf("%d",&a);
                sum +=res[a];
            }
            printf("Case %d: %lld Xukha
    ",cas++,sum);
        }
        return 0;
    }
    为了更好的明天
  • 相关阅读:
    Boot.ini
    CCP4 SET
    Install GTK+ GLIB
    C head file
    Changes in Python
    ubuntu
    错误: 配置节中设置 validateRequest=false 可以禁用请求验证
    c++中冒号(:)和双冒号(::)的用法
    C++学习之类和结构体
    C++中双冒号的作用
  • 原文地址:https://www.cnblogs.com/xiuwenli/p/9438885.html
Copyright © 2020-2023  润新知