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;
    }
    
  • 相关阅读:
    委托
    队列和栈、泛型
    Java去除字符串中 除数字和逗号以外的符号
    SQL查询重复记录
    使用EasyExcel导出图片及异常处理
    Nacos开机自启
    Redis开机自启
    Nginx开机自启
    Java 向数组中添加元素
    Java:如何打印整个字符串数组?
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/7613300.html
Copyright © 2011-2022 走看看