zoukankan      html  css  js  c++  java
  • lightoj1370欧拉函数/素数筛

    这题有两种解法,1是根据欧拉函数性质:素数的欧拉函数值=素数-1(可根据欧拉定义看出)欧拉函数定义:小于x且与x互质的数的个数

    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<cassert>
    #include<iomanip>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    
    const double g=10.0,eps=1e-7;
    const int N=1000000+10,maxn=500+100,inf=0x3f3f3f;
    
    ll Euler[N];
    void euler()
    {
        Euler[1]=1;
        for(ll i=2;i<N;i++)Euler[i]=i;
        for(ll i=2;i<N;i++)
            if(Euler[i]==i)
               for(ll j=i;j<N;j+=i)
                  Euler[j]-=Euler[j]/i;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        ll t,n,cnt=0;
        euler();
        cin>>t;
        while(t--){
            cin>>n;
            ll ans=0;
            for(ll i=0;i<n;i++)
            {
                ll a;
                cin>>a;
                for(ll j=a+1;j<N;j++)
                    if(Euler[j]==j-1)
                    {
                        ans+=j;
                        break;
                    }
            }
            cout<<"Case "<<++cnt<<": "<<ans<<" Xukha"<<endl;
        }
        return 0;
    }
    /*********************
    3
    5
    1 2 3 4 5
    6
    10 11 12 13 14 15
    2
    1 1
    *********************/
    euler

    2是直接用素数筛

    #include<map>
    #include<set>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    #include<cstdio>
    #include<cassert>
    #include<iomanip>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define pi acos(-1.0)
    #define ll long long
    #define mod 1000000007
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #pragma comment(linker, "/STACK:1024000000,1024000000")
    
    using namespace std;
    
    const double g=10.0,eps=1e-7;
    const int N=1000000+10,maxn=500+100,inf=0x3f3f3f;
    
    bool prime[N];
    void getprime()
    {
        memset(prime,0,sizeof prime);
        prime[1]=1;
        for(int i=2;i<N;i++)
        {
            if(!prime[i])
            {
                for(int j=2*i;j<N;j+=i)
                    prime[j]=1;
            }
        }
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        ll t,n,cnt=0;
        getprime();
        cin>>t;
        while(t--){
            cin>>n;
            ll ans=0;
            for(ll i=0;i<n;i++)
            {
                ll a;
                cin>>a;
                for(ll j=a+1;j<N;j++)
                    if(!prime[j])
                    {
                        ans+=j;
                        break;
                    }
            }
            cout<<"Case "<<++cnt<<": "<<ans<<" Xukha"<<endl;
        }
        return 0;
    }
    /*********************
    3
    5
    1 2 3 4 5
    6
    10 11 12 13 14 15
    2
    1 1
    *********************/
    prime

    后者仅花了56ms,前者120ms

  • 相关阅读:
    centos下使用yum 安装pip
    unity3d Aniso Level 摄像机近地面清楚,远地面模糊
    Unity3D 多平台 预编译 宏定义
    Mecanim的Avater
    Mecanim 学习概述
    Unity物理系统的触发器
    Unity开发 资源准备
    我的Unity学习路线
    贴图在Unity中的设置
    在Unity中为模型使用表情
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/7212233.html
Copyright © 2011-2022 走看看