zoukankan      html  css  js  c++  java
  • Stern-Brocot Tree

    Stern-Brocot Tree

    思路

    欧拉函数
    法雷数列中所有的都是真分数分子分母互质并且以n为分母的分数有oula[n]个即欧拉函数。
    代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    bool prime_table[1000005];
    int  prime[1000005];
    LL oula[1000005];
    class memo
    {
       public:
           memo()
           {
               memset(prime_table,0,sizeof(prime_table));
               for(int i = 0;i <= 1000000;i++)
                   oula[i] = i;
           }
           void table();
           void slove(int c);
    };
    void memo::slove(int c)
    {
        int n;
        n = c;
        printf("%lld
    ",(LL)2*oula[n] + 1LL);
    }
    void memo::table()
    {
        for(int i = 2;i <= 10000;i++)
        {
            if(!prime_table[i])
            {
                for(int j = i;(i*j) <= 1000000;j++)
                    prime_table[i*j] = true;
            }
        }
        int cn = 0;
        for(int i  = 2;i <= 1000000;i++)
            if(!prime_table[i])
                prime[cn++]  = i;
        for(int i = 0;i < cn;i++)
        {
            for(int j = 1;prime[i]*j <= 1000000;j++)
            {
                oula[prime[i]*j]/=(LL)prime[i];
                oula[prime[i]*j]*=(LL)prime[i] - 1;
            }
        }
        for(int i = 2;i <= 1000000;i++)
            oula[i] += oula[i-1];
    }
    int main(void)
    {
        memo T;
        T.table();
        int c;
        while(scanf("%d",&c)!=EOF)
        {
           T.slove(c);
        }
        return 0;
    }
    
  • 相关阅读:
    【2019/3/23】周进度报告
    第十周总结
    程序员修炼之道-从小工到专家阅读笔记01
    第九周总结
    用户模板和用户场景
    一维数组最大子数组续
    程序员的自我修养阅读笔记03
    第八周总结
    NABCD项目分析
    第七周总结
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/7613300.html
Copyright © 2011-2022 走看看