zoukankan      html  css  js  c++  java
  • hdu3572线性欧拉筛

    用线性筛来筛,复杂度O(n)

    #include<bits/stdc++.h>
    #include<ext/rope>
    #define fi first
    #define se second
    #define mp make_pair
    #define pb push_back
    #define pii pair<int,int>
    #define C 0.5772156649
    #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
    
    using namespace std;
    using namespace __gnu_cxx;
    
    const double g=10.0,eps=1e-7;
    const int N=3000000+10,maxn=100000+10,inf=0x3f3f3f;
    
    bool isprime[N];
    int prime[N],cnt,phi[N];
    void getprime()
    {
        cnt=0;
      //  memset(isprime,1,sizeof isprime);
      //  isprime[1]=1;
        for(int i=2;i<N;i++)
        {
            if(!isprime[i])
            {
                prime[++cnt]=i;
                phi[i]=i-1;
            }
            for(int j=1;j<=cnt&&i*prime[j]<N;j++)
            {
                isprime[i*prime[j]]=1;
                if(i%prime[j]==0)
                {
                    phi[i*prime[j]]=phi[i]*prime[j];
                    break;
                }
                phi[i*prime[j]]=phi[i]*phi[prime[j]];
            }
        }
    }
    int main()
    {
        getprime();
        int a,b;
        while(~scanf("%d%d",&a,&b))
        {
            ll ans=0;
            for(int i=a;i<=b;i++)
                ans+=phi[i];
            printf("%I64d
    ",ans);
        }
        return 0;
    }
    /*******************
    
    ********************/
    View Code

    类似于素数筛,利用欧拉函数是积性函数f(a*b)=f(a)*f(b)性质

    素数i的欧拉函数值为i-1,如果是合数,那么利用最小的因子来筛它

  • 相关阅读:
    Leetcode 121. Best Time to Buy and Sell Stock
    Leetcode 120. Triangle
    Leetcode 26. Remove Duplicates from Sorted Array
    Leetcode 767. Reorganize String
    Leetcode 6. ZigZag Conversion
    KMP HDU 1686 Oulipo
    多重背包 HDU 2844 Coins
    Line belt 三分嵌套
    三分板子 zoj 3203
    二分板子 poj 3122 pie
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/7726524.html
Copyright © 2011-2022 走看看