求最大公约数的和 51nod 1040

原创 2018年04月16日 20:21:57

题意:
给出一个n,求1-n这n个数,同n的最大公约数的和。比如:n = 6
1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15

Input
1个数N(N <= 10^9)
Output
公约数之和
Input示例
6
Output示例
15

/*
(欧拉函数)

给你n,然后求[1,n]所有数与n的最大公约数的和
如果直接暴力 看下数据不用想肯定超时

n的最大公约数必定是n的因子v,所以考虑枚举因子分别求他们的个数num,那么因子v对答案的贡献就是v*num
相当于求[1,n]中 GCD(a[i],n) = v的个数,也就成了GCD(a[i]/v,n/v)=1的个数。 欧拉函数求出即可。

欧拉函数:[1,n]中 gcd[i,n]=x的个数
这个题只能直接求欧拉函数 如果打表的话这个题目会炸

*/
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string>

using namespace std;

#define LL long long

LL eluar(LL n)//欧拉函数 直接求解
{
    LL ans=1;
    for(LL i=2; i*i<=n; i++)
    {
        if(n%i==0)
        {
            n/=i;
            ans*=i-1;
            while(n%i==0)
            {
                n/=i;
                ans*=i;
            }
        }
    }
    if(n>1)
        ans*=n-1;
    return ans;
}

int main()
{
    LL n;
    while(~scanf("%lld",&n))
    {
        LL ans=0;
        for(LL i=1; i*i<=n; i++)
        {
            if(n%i==0)
            {
                LL t=n/i;
                ans+=i*eluar(t);
                if(i!=t)
                {
                    ans+=t*eluar(n/t);
                }
            }
        }
        printf("%lld\n",ans);


    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Puppet__/article/details/79965844

Python-多进程检索

-
  • 1970年01月01日 08:00

51NOD 1040 最大公约数之和(分析 + 欧拉函数)

传送门 1040 最大公约数之和 题目来源: rihkddd 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出一个n,求1-n这n个数,同n的最大公约数...
  • qingshui23
  • qingshui23
  • 2016-05-30 10:53:47
  • 881

51Nod-1040-最大公约数之和

ACM模版描述题解很有趣的一道题,欧拉函数原来还可以这么玩~~~既然是1~n与n的公约数,那么肯定是n的因子。 每一个n的因子所对sum产生的增量为:gcd(n, i) = x(x为这个因子)的个数...
  • f_zyj
  • f_zyj
  • 2016-10-10 20:00:33
  • 501

51nod1040 最大公约数之和 (欧拉函数 )

51nod1040 最大公约数之和 (欧拉函数 )
  • u013790563
  • u013790563
  • 2015-04-20 17:10:38
  • 892

51nod-1040 最大公约数之和

解题思路: 这题感觉dalao们会说这题是个水题....虽然这题确实挺简单的... 思路很好想,求最大公约数之和嘛,对于n,从1-n与n之间的最大公约数,必然不可能有n个,也就是必然出现再n的因子...
  • Snow_Me
  • Snow_Me
  • 2017-04-24 11:37:32
  • 200

51nod-1040-最大公约数之和(欧拉函数)

给出一个n,求1-n这n个数,同n的最大公约数的和。比如:n = 6 1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15 Input ...
  • qq978874169
  • qq978874169
  • 2016-05-06 14:53:59
  • 497

1040 最大公约数之和 (STL)

给出一个n,求1-n这n个数,同n的最大公约数的和。比如:n = 6 1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15 Input ...
  • h1021456873
  • h1021456873
  • 2015-10-31 17:19:33
  • 349

51nod1040最大公约数之和

题目大意: 给出一个n,求1-n这n个数,同n的最大公约数的和。比如:n = 6 1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15 I...
  • qq_24477135
  • qq_24477135
  • 2016-03-08 18:53:10
  • 148

51Nod-1011-最大公约数GCD

输入2个正整数A,B,求A与B的最大公约数。 Input 2个数A,B,中间用空格隔开。(1...
  • f_zyj
  • f_zyj
  • 2016-04-15 21:23:30
  • 501

51nod1179 最大的最大公约数

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1179 题目来源: SGU 基准时间限制:1 秒...
  • u013790563
  • u013790563
  • 2014-09-25 16:02:45
  • 886
收藏助手
不良信息举报
您举报文章:求最大公约数的和 51nod 1040
举报原因:
原因补充:

(最多只允许输入30个字)