zoukankan      html  css  js  c++  java
  • P2303 [SDOi2012]Longge的问题

    题目背景

    SDOi2012

    题目描述

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

    输入输出格式

    输入格式:

    一个整数,为N。

    输出格式:

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

    输入输出样例

    输入样例#1: 复制
    6
    输出样例#1: 复制
    15

    说明

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

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

    //Pro:P2303 [SDOi2012]Longge的问题
    
    //仍然是考虑让gcd(i,n)=d
    //那么gcd(i/d,n/d)=1
    //所以gcd(i,n)=d的i的个数就有phi(n/d)个
    //但是n<=2^32,开不下数组,所以要一个数一个数算
    //ans+=phi(n/d)*d+phi(d)*(n/d)
    
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    
    long long n;
    
    long long getphi(long long x)
    {
        long long res=x,tmp=x,i=2;
        for(;i*i<=x;++i)
        {
            if(tmp%i)
                continue;
            res-=res/i;
            while(tmp%i==0)
                tmp/=i;
        }
        if(tmp>1)
            res-=res/tmp;
        return res;
    }
    
    long long ans;
    int main()
    {
        scanf("%lld",&n);
        long long g=sqrt(n);
        for(long long i=1,d;i<=g;++i)
        {
            if(n%i==0)
            {
                d=n/i;
                ans+=getphi(d)*i+getphi(i)*d;
            }
        }
        if(g*g==n)
            ans-=getphi(g)*g;
        printf("%lld",ans);
        return 0;
    }
  • 相关阅读:
    asp.net发布和更新网站
    细说 Form (表单)
    python之面向对象进阶3
    python之面向对象进阶2
    python之面向对象进阶
    python之面向对象
    python之模块与包
    python之常用模块(续)
    python 之常用模块
    迭代器和生成器函数
  • 原文地址:https://www.cnblogs.com/lovewhy/p/9633480.html
Copyright © 2011-2022 走看看