zoukankan      html  css  js  c++  java
  • 数论-欧拉函数-LightOJ

      我是知道φ(n)=n-1,n为质数  的,然后给的样例在纸上一算,嗯,好像是找往上最近的质数就行了,而且有些合数的欧拉函数值还会比比它小一点的质数的欧拉函数值要小,所以坚定了往上找最近的质数的决心——不过11往上最近的质数是13,不能包括本身。

      这样胡来居然AC了,但是之后还是老老实实地去看别人怎么做。

      把代码贴出来供后来人观赏:

      

    #include<cstdio>
    #include<cstring>
    #include<vector>
    using namespace std;
    #define maxn 1000005    //pay
    #define sc(x) scanf("%d",&x)
    #define scc(x,y) scanf("%d%d",&x,&y)
    #define sccc(x,y,z) scanf("%d%d%d",&x,&y,&z)
    #define pt printf
    #define mll unsigned long long 
    #define rep(i,a,b)  for(int i=(a);i<(b);++i)
    const int inf = 0x3f3f3f3f; 
    int T,N,M,cnt=0;
    mll ans;
    int pri[maxn],vis[maxn];
    int my_bsh(int x)
    {
        int l,r,m,ret;
        l=0,r=cnt-1;
        while(l<=r)
        {
            m=(l+r)>>1;
            if(pri[m]>x){
                ret=pri[m];
                r  =m-1;
            }else{
                l=m+1;
            }
        }
        return ret;
    }
    int main()
    {
       // freopen("in.txt","r",stdin);
        sc(T);
        int kase,x,y ; 
        mll i,j;
        for(i=2;i<(mll)maxn;++i){
            if(!vis[i]) {
                pri[cnt++]=(int)i;
                for(j=i*i;j<(int)maxn;j+=i)  vis[j]=1;
            }
        }
        for(kase = 1;kase<=T;++kase)
        {
            ans= 0;
            sc(N);
            rep(i,0,N)
            {
                sc(x);
                y = my_bsh(x);
                //pt("Y=%d
    ",y);
                ans+=(mll)y;
            }
            pt("Case %d: %llu Xukha
    ",kase,ans);
        }
        return 0;
    }
    数论 欧拉函数
  • 相关阅读:
    P5049 旅行(数据加强版)(基环树)
    P5024 保卫王国(动态dp/整体dp/倍增dp)
    CF891C Envy(离线/在线+可撤销并查集/并查集/LCT)
    CF1217题解
    CF1215题解
    浅谈bitset
    CF1214题解
    CF1213F Unstable String Sort(差分)
    C++创建和使用动态链接库
    交叉编译openssl1.1.1a
  • 原文地址:https://www.cnblogs.com/lighten-up-belief/p/11391347.html
Copyright © 2011-2022 走看看