zoukankan      html  css  js  c++  java
  • Longge的问题(bzoj 2705)

    Description

    Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题。现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N)。

    Input

    一个整数,为N。

    Output

    一个整数,为所求的答案。

    Sample Input

    6

    Sample Output

    15

    HINT

    【数据范围】

    对于60%的数据,0<N<=2^16。

    对于100%的数据,0<N<=2^32。

    /*
      想了很长时间,实在没想出怎么做。
      正解貌似很简单,设k=gcd(i,n),那么1=gcd(i/k,n/k),那么如果我们知道了K,可以用欧拉函数解出i的个数,把所有i的个数加起来就行了,
      至于枚举K,就是枚举n的因数。 
    */
    #include<cstdio>
    #include<iostream>
    #define lon long long
    using namespace std;
    lon n,ans;
    lon oula(lon x){
        lon res=x,a=x;
        for(lon i=2;i*i<=a;i++){
            if(a%i==0){
                res-=res/i;//res=res*(1-1/i)
                while(a%i==0) a/=i;
            }
        }
        if(a>1) res-=res/a;
        return res;
    }
    int main(){
        cin>>n;
        for(lon i=1;i*i<=n;i++){
            if(n%i) continue;
            ans+=oula(n/i)*i;
            if(i*i!=n) ans+=oula(i)*(n/i);
        }
        cout<<ans;
    }
  • 相关阅读:
    SDOI2018 旧试题
    JSOI2004 平衡点 / 吊打XXX
    SDOI2017 数字表格
    CQOI2015 选数
    BZOJ2741 【FOTILE模拟赛】L
    BZOJ4103 [Thu Summer Camp 2015]异或运算
    BZOJ3689 异或之
    BZOJ4128 Matrix
    HNOI2006 最短母串问题
    SCOI2013 密码
  • 原文地址:https://www.cnblogs.com/harden/p/6481233.html
Copyright © 2011-2022 走看看