zoukankan      html  css  js  c++  java
  • 新视野OJ 2705 [SDOI2012]Longge的问题 (数论)

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2705


    题解:求 sigma(gcd(i,n), 1<=i<=n<2^32)
    又是令gcd(i, n) = d,答案就是sigma(phi(n/d)),但是我们不能预处理出phi[]数组,因为开不了数组……
    注意到因数个数是O(2sqrt(n))级别的,我们枚举所有的n/d,一边dfs一边算phi。


    AC代码:

    2705 Accepted 1272 kb ms C++/Edit
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <cstdlib>
    #include <cmath>
    #include <vector>
    #include <list>
    #include <deque>
    #include <queue>
    #include <iterator>
    #include <stack>
    #include <map>
    #include <set>
    #include <algorithm>
    #include <cctype>
    using namespace std;
    
    #define si1(a) scanf("%d",&a)
    #define si2(a,b) scanf("%d%d",&a,&b)
    #define sd1(a) scanf("%lf",&a)
    #define sd2(a,b) scanf("%lf%lf",&a,&b)
    #define ss1(s)  scanf("%s",s)
    #define pi1(a)    printf("%d
    ",a)
    #define pi2(a,b)  printf("%d %d
    ",a,b)
    #define mset(a,b)   memset(a,b,sizeof(a))
    #define forb(i,a,b)   for(int i=a;i<b;i++)
    #define ford(i,a,b)   for(int i=a;i<=b;i++)
    
    typedef long long LL;
    const int N=40000;
    const int INF=0x3f3f3f3f;
    const double PI=acos(-1.0);
    const double eps=1e-7;
    
    int n,cnt,p[30],c[30];
    LL ans=0;
    
    void dfs(int step,int pdt,int phi)
    {
        if(step==cnt)
        {
            ans+=phi;
            return;
        }
        dfs(step+1,pdt,phi);
        phi=phi/p[step]*(p[step]-1);
    
        for(int i=1;i<=c[step];++i)
            dfs(step+1,pdt*=p[step],phi);
    }
    
    int main()
    {
        scanf("%d",&n);
        int x=n;
        for(int i=2;i*i<=x;++i)
            if(x%i==0)
            {
                for(;x%i==0;x/=i)
                    ++c[cnt];
                p[cnt++]=i;
            }
        if(x>1)
            c[cnt]=1,p[cnt++]=x;
    
        dfs(0,1,n);
        printf("%lld
    ",ans);
    
        return 0;
    }
    


  • 相关阅读:
    398. Random Pick Index
    382. Linked List Random Node
    645. Set Mismatch
    174. Dungeon Game
    264. Ugly Number II
    115. Distinct Subsequences
    372. Super Pow
    LeetCode 242 有效的字母异位词
    LeetCode 78 子集
    LeetCode 404 左叶子之和
  • 原文地址:https://www.cnblogs.com/riasky/p/3361036.html
Copyright © 2011-2022 走看看