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

题目链接:

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1040

分析:

我们可以枚举x的约束为xi,那么结果就等于

sum = sigma( xi * mi)  mi  表示的是与x最大公约数

为xi的数的个数,那么我们的问题就转化成了求mi;

如果GCD(x,m) == f  那么我们将其转化到 [1,x/f]区间内

则与x/f互质的数的个数 转化到[1,x]区间内就等于最大

公约数为f的数的个数。

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

typedef long long LL;

LL phi(LL n){
    LL rea = n;
    for(LL i = 2;i*i<=n;i++){
        if(n%i==0){
            rea = rea - rea/i;
            while(n%i==0) n/=i;
        }
    }
    if(n>1) rea = rea - rea/n;
    return rea;
}

int main()
{
    LL n;
    while(~scanf("%lld",&n)){
        LL ans = 0;
        for(LL i=1;i*i<=n;i++){
            if(n%i==0&&i*i==n)
                ans+=phi(i)*i;
            if(n%i==0&&i*i!=n){
                ans+=phi(n/i)*i;
                ans+=phi(i)*n/i;
            }
        }
        printf("%lld\n",ans);
    }
    return 0;
}
时间: 2024-10-16 08:41:24

51nod1040 最大公约数之和 (欧拉函数 )的相关文章

费马小定理,欧拉函数

在证明这些定理之前先证明一个有意思的定理. 对于0 mod m,n mod m , 2n mod m, 3n mod m, 4n mod m... (m-1)n mod m 对应解集序列 一定有 m/d份 0 d 2d 3d..m-d. (不一定按照顺序) 这样的解. 其中d = gcd(n,m) 具体点:n=8,m=12.  d = gcd(n,m)=4 对于 0 mod 12,8 mod 12,16 mod 12,24 mod 12,32 mod 12,40 mod 12...88 mod

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

1040 最大公约数之和 题目来源: rihkddd 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 给出一个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 思路: 目的是求∑(i= 1,n) gcd( i , n ): gcd(

AcWing 220. 最大公约数 | 欧拉函数

传送门 题目描述 给定整数N,求1<=x,y<=N且GCD(x,y)为素数的数对(x,y)有多少对. GCD(x,y)即求x,y的最大公约数. 输入格式 输入一个整数N 输出格式 输出一个整数,表示满足条件的数对数量. 数据范围 1≤N≤10^7 输入样例: 4 输出样例: 4 题解:本题要求1<=x,y<=N且GCD(x,y)为素数的数对(x,y)数量,相当于求:对于N以内的每一个素数p,1<=x,y<=N/p 中GCD(x,y)为1的数对(x,y)数量和.我们知道欧

欧拉函数之和(51nod 1239)

对正整数n,欧拉函数是小于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商数等.例如:φ(8) = 4(Phi(8) = 4),因为1,3,5,7均和8互质. S(n) = Phi(1) + Phi(2) + ...... Phi(n),给出n,求S(n),例如:n = 5,S(n) = 1 + 1 + 2 + 2 + 4 = 10,定义Phi(1) = 1.由于结果很大,输出Mod 1000000007的结

【51nod-1239&amp;1244】欧拉函数之和&amp;莫比乌斯函数之和 杜教筛

题目链接: 1239:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 1244:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 杜教筛裸题,不过现在我也只会筛这俩前缀和... $$s(n)=\sum _{i=1}^{n}f(i)$$ 那么就有: $$\sum_{i=1}^{n}f(i)\lfloor \frac{n}{i} \

UVa 11426 (欧拉函数 GCD之和) GCD - Extreme (II)

题意: 求sum{gcd(i, j) | 1 ≤ i < j ≤ n} 分析: 有这样一个很有用的结论:gcd(x, n) = i的充要条件是gcd(x/i, n/i) = 1,因此满足条件的x有phi(n/i)个,其中Phi为欧拉函数. 所以枚举i和i的倍数n,累加i * phi(n/i)即可. 1 #include <cstdio> 2 typedef long long LL; 3 4 const int maxn = 4000000; 5 6 int phi[maxn + 10]

BZOJ 2818: Gcd区间内最大公约数 为素数的对数(欧拉函数的应用)

传送门 2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 3649 Solved: 1605 [Submit][Status][Discuss] Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sample Output 4 HINT hint 对于样例(2,2),(2,4),(3,3),(4,

欧拉函数hdu——————1286

现在先来解释下欧拉函数的的定义: 就是  正整数n里  小于N且与N互质(gcd为1)的数. (度娘:在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商数等. 例如φ(8)=4,因为1,3,5,7均和8互质.) Problem Description 新年快到了,“猪头帮协会”准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,

HDOJ 1787 GCD Again(欧拉函数)

GCD Again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2611    Accepted Submission(s): 1090 Problem Description Do you have spent some time to think and try to solve those unsolved problem a