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( i , n ) = x,表示x是n的因子。稍作变形gcd( i / x , n / x) = 1,

看到这个式子可以想到欧拉函数,也就是求比n/x小的与其互质的个数。

因为这些书和n/x互质,乘上x后与n的最大公约数只有x。

也就是说我们先求出每个因子,然后计算每个因子有多少贡献即可。

/*
 * Author:  sweat123
 * Created Time:  2016/6/27 14:01:46
 * File Name: main.cpp
 */
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<string>
#include<vector>
#include<cstdio>
#include<time.h>
#include<cstring>
#include<iostream>
#include<algorithm>
#define INF 1<<30
#define MOD 1000000007
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define pi acos(-1.0)
using namespace std;
const int MAXN = 1000000;
int n;
ll ef(int n)
{
    ll cnt = n;
    int i;
    for(i = 2; i * i <= n; i++){
        if(n % i == 0)
        {
            cnt -= cnt / i;      //   (x-x/p1) *(1-1/p2)*(1-1/p3)*(1-1/p4).....
            while(n % i == 0)
                n /= i;
        }
    }
    if(n > 1) cnt -= cnt / n;
    return cnt;
} 

int main(){
    while(~scanf("%d",&n)){
        ll ans = 0;
        for(int i = 1; i <= (int)sqrt(n); i++){
            if(n % i == 0){
                ans += ef(n / i) * i;
                if(n / i != i){
                    ans += ef(i) * (n / i);
                }
            }
        }
        printf("%lld\n",ans);
    }
    return 0;
}
时间: 2024-10-10 06:02:01

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

51nod 1363 最小公倍数的和 欧拉函数+二进制枚举

1363 最小公倍数之和 题目来源: SPOJ 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 160 给出一个n,求1-n这n个数,同n的最小公倍数的和.例如:n = 6,1,2,3,4,5,6 同6的最小公倍数分别为6,6,6,12,30,6,加在一起 = 66. 由于结果很大,输出Mod 1000000007的结果. Input 第1行:一个数T,表示后面用作输入测试的数的数量.(1 <= T <= 50000) 第2 - T + 1行:T个数A[i](A[i] <

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的数的个数. 代码如下:

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 1136 欧拉函数

1136 欧拉函数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商数等.例如:φ(8) = 4(Phi(8) = 4),因为1,3,5,7均和8互质. Input 输入一个数N.(2 <= N <= 10^9) Output 输出Phi(n). Input示例 8 Output示例 4

51Nod 1136 欧拉函数 Label:数论

对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商数等.例如:φ(8) = 4(Phi(8) = 4),因为1,3,5,7均和8互质. Input 输入一个数N.(2 <= N <= 10^9) Output 输出Phi(n). Input示例 8 Output示例 4 代码 1 #include<iostream> 2 #include<cstring> 3

51nod 1136 欧拉函数【数论】

1136 欧拉函数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目.此函数以其首名研究者欧拉命名,它又称为Euler's totient function.φ函数.欧拉商数等.例如:φ(8) = 4(Phi(8) = 4),因为1,3,5,7均和8互质. Input 输入一个数N.(2 <= N <= 10^9) Output 输出Phi(n). Input示例 8 Output示例 4

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,

51Nod 1040 最大公约数之和

                                 1040 最大公约数之和 给出一个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) //实际上应该是n<=10^18 Output 公约数之和 Input示例 6 Output示例 15 欧拉函数 对于 样例 1 2 3 2 1 ----6 有2个1 2个2 和 1个3 两个1的情况