1. 程式人生 > >51nod 1040 最大公約數之和(尤拉函式)

51nod 1040 最大公約數之和(尤拉函式)

水平較水,想不到,看的討論版
與n的公約數,肯定是n的因子
那我們列舉n的因子就好了
假設因子為x,那麼x的貢獻次數就是1-n有多少個數與n的gcd=x,即1-n/x有多少個數與n/x互質,即phi(n/x)

#include <bits/stdc++.h>
typedef long long LL;

LL getEuler(LL num)
{
    LL res = num;
    for(int i = 2; i*i <= num; ++i)
    {
        if(num%i == 0)
        {
            res -= res/i;
            while
(num%i == 0) num /= i; } } if(num > 1) res -= res/num; return res; } int main() { int n; LL res = 0; scanf("%d",&n); for(int i = 1; i*i <= n; ++i) { if(n%i == 0) { if(i*i == n) res += getEuler(i)*i
; else res += getEuler(n/i)*i + getEuler(i)*(n/i); } } printf("%lld\n",res); return 0; }

相關推薦

51nod-1040 大公約數之和函式

基準時間限制: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

51nod 1040 大公約數之和函式

水平較水,想不到,看的討論版 與n的公約數,肯定是n的因子 那我們列舉n的因子就好了 假設因子為x,那麼x的貢獻次數就是1-n有多少個數與n的gcd=x,即1-n/x有多少個數與n/x互質,即ph

51NOD1040-大公約數之和函式

原題連線 首先補充一個知識點,尤拉函式: 在數論,對正整數n,尤拉函式是小於n的正整數中與n互質的數的數目(φ(1)=1)。此函式以其首名研究者尤拉命名(Euler’s totient function),它又稱為Euler’s totient f

51nod 1040 大公約數之和函數

wid con cst 都是 快的 .html lan inf log http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1040 題意: 思路:最大公約數肯定也是在1~n這個範圍裏的,

51nod 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 <=

[函式]51nod 1040 大公約數之和 題解

(傳送門) 題目大意 求∑i=1ngcd(i,n)\sum_{i=1}^{n}\ gcd(i,n)∑i=1n​gcd(i,n) 解題分析 注意,所有gcd(x,n)最後都是n的因數。所以可以對因數分類,

[51nod] 1040 大公約數之和

lose pre 函數 ref href image 需要 include 數字 1040 最大公約數之和 題目來源: rihkddd 基準時間限制:1 秒 空間限制:131072 KB 分值: 80 難度:5級算法題 給出一個n,求1-n

51Nod-1040-大公約數之和

ACM模版 描述 題解 很有趣的一道題,尤拉函式原來還可以這麼玩~~~ 既然是1~n與n的公約數,那麼肯定是n的因子。 每一個n的因子所對sum產生的增量為:gcd(n, i) = x(x

[數論] 51Nod 1040 大公約數之和

推一推就是 sigma d|n d*phi(n/d) 那麼質因數分解 dfs出所有因數 #include<cstdio> #include<cstdlib> #include

51nod 1040 大公約數之和

51nod 1040 最大公約數之和 解法一 尤拉函式: 由題意得,該題求Σ(n,i=1)gcd(i,n) 令gcd(i,n)=x,列舉n的因子x,最後答案為因子x乘以x出現的次數的和。 求gcd(n,i)=x出現的次數,即gcd(n/x,i/x)=

51Nod 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(

函式應用1040 大公約數之和

1040 最大公約數之和 1 秒   131,072 KB   80 分   5 級題 給出一個n,求1-n這n個數,同n的最大公約數的和。比如:n = 6 1,2,3,4,5,6 同6的最大公約數分別為1,2,

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

51nod 1040 求1-n這n個數,同n的大公約數的和函式

題目:給出一個n,求1-n這n個數,同n的最大公約數的和。比如:n = 6           1,2,3,4,5,6 同6的最大公約數分別為1,2,3,2,1,6,加在一起 = 15 思路:一個數與n的最大公約數肯定是n的因子中的一個,所以只需要列舉n的每一個因子x,然

大公約數之和 V2函式

【題目描述】 給出一個數N,輸出小於等於N的所有數,兩兩之間的最大公約數之和。相當於求 Ans=∑i=1i<n∑j=i+1j<ngcd(i,j)Ans=∑i=1i<n∑j=i+1j<ngcd(i,j) Input 第1行:1個數

[函式]51nod 1188 大公約數之和 V2 題解

(傳送門) 題目大意 求∑i=1n−1∑j=i+1ngcd(i,j)\sum_{i=1}^{n-1}\sum_{j=i+1}^{n}gcd(i,j)∑i=1n−1​∑j=i+1n​gcd(i,j) 解題

1040 大公約數之和(歐函數)

公約數 online cli 算法題 inf group mil mod += 1040 最大公約數之和 題目來源: rihkddd 基準時間限制:1 秒 空間限制:131072 KB 分值: 80 難度:5級算法題 給出一個n,求1-n這n個

51nod 1188 大公約數之和 V2

floor names log mes phi cst info printf body 第二個\( O(T\sqrt(n)) \)復雜度T了..T了..T了...天地良心,這能差多少?! 於是跑去現算(。 \[ \sum_{i=1}^{n-1}\sum_{j=i+1}^

FJUT3565 大公約數之和容斥題解

題意:給n,m,求出 思路:題意為求出1~m所有數和n的gcd之和。顯然gcd為n的因數。我們都知道gcd(a,b)= c,那麼gcd(a/c,b/c)= 1。也就是說我們列舉n所有的因數k,然後去找1~m/k中和n/k互質的個數就是gcd為k的個數。這個直接容斥就行。 程式碼: #include

51nod 237 大公約數之和 V3 杜教篩

ace sin sig highlight n+1 brush print turn else Code: #include <bits/stdc++.h> #include <tr1/unordered_map> #define se