zoukankan      html  css  js  c++  java
  • POJ 2478 Farey Sequence

    /*
    POJ 2478 Farey Sequence
    http://poj.org/problem?id=2478
    欧拉函数 线性筛
    原问题转化成1-n之间的欧拉函数和,因此利用线性筛在O(n)时间内求出其欧拉函数值
    在求前缀和即可。
     *
     *
     *
     */
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    const int Nmax=1000005;
    long long num[Nmax];
    long long prime[Nmax];
    long long phi[Nmax];
    int is_prime[Nmax];
    int prime_cnt;
    int n;
    /*long long oula(long long n)*/
    //{
        //long long ret=1LL,i;
        //for(i=2;i*i<=n;i++)
        //{
            //if(n%i==0)
            //{
                //n/=i,ret*=i-1LL;
                //while(n%i==0LL) n/=i,ret*=i;
            //}
        //}
        //if(n>1LL) ret*=n-1LL;
        //return ret;
    /*}*/
    
    void get()
    {
        for(int i=2;i<Nmax;i++)
            is_prime[i]=1;
        for(long long i=2;i<Nmax;i++)
        {
            if(is_prime[i])
            {
                prime[++prime_cnt]=i;
                phi[i]=i-1;
            }
            for(int j=1;j<=prime_cnt;j++)
            {
                if(i*prime[j]>=Nmax)
                    break;
                is_prime[i*prime[j]]=0;
                if(i%prime[j]==0)
                {
                    phi[i*prime[j]]=phi[i]*prime[j];
                    break;
                }
                else
                    phi[i*prime[j]]=phi[i]*(prime[j]-1);
            }
        }
    }
    
    
    int main()
    {
        //freopen("a.in","r",stdin);
        get();
        for(int i=2;i<Nmax;i++)
            phi[i]+=phi[i-1];
        int n;
        while(scanf("%d",&n)==1)
        {
            if(!n)
                break;
            printf("%lld
    ",phi[n]);
        }
        return 0;
    }
  • 相关阅读:
    java面试题总汇
    数据库sql语句规则
    docker安装redis(网上很多答案都是错误的,小心误入歧途!)
    docker 安装redis后,可视化工具无法连接
    Session
    #{}和${}区别
    axios和ajax区别
    Git使用
    Git常用命令
    如何简单粗暴的搞定dubbo调用模块
  • 原文地址:https://www.cnblogs.com/BBBob/p/6526654.html
Copyright © 2011-2022 走看看