51Nod-1040-最大公約數之和
描述
題解
很有趣的一道題,尤拉函式原來還可以這麼玩~~~
既然是1~n與n的公約數,那麼肯定是n的因子。
每一個n的因子所對sum產生的增量為:gcd(n, i) = x
(x為這個因子)的個數,也就是gcd(n / x, i / x) = 1
的個數,這時,順理成章的也就想起了phi(n / x)
了,求尤拉函式的方法多種多樣,但是這裡不能使用篩法,因為記憶體會爆掉的,只能單獨求解尤拉函式,並且在求n得因子上做一定的優化才行,注意sum必須是long long
型別的哦。
程式碼
#include <iostream>
#include <cmath>
using namespace std;
/*
* 單獨求解的本質是公式的應用
*/
unsigned euler(unsigned x)
{
unsigned i, res = x; // unsigned == unsigned int
for (i = 2; i < (int)sqrt(x * 1.0) + 1; i++)
{
if (!(x % i))
{
res = res / i * (i - 1);
while (!(x % i))
{
x /= i; // 保證i一定是素數
}
}
}
if (x > 1)
{
res = res / x * (x - 1);
}
return res;
}
int main(int argc, const char * argv[])
{
int N;
cin >> N;
long long sum = 0;
for (int i = 1; i * i <= N; i++)
{
if (N % i == 0)
{
int tmp = N / i;
sum += euler(tmp) * i;
if (i != tmp)
{
sum += euler(i) * tmp;
}
}
}
cout << sum << '\n';
return 0;
}
相關推薦
51nod 1040 最大公約數之和(歐拉函數)
wid con cst 都是 快的 .html lan inf log http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1040 題意: 思路:最大公約數肯定也是在1~n這個範圍裏的,
[51nod] 1040 最大公約數之和
lose pre 函數 ref href image 需要 include 數字 1040 最大公約數之和 題目來源: rihkddd 基準時間限制:1 秒 空間限制:131072 KB 分值: 80 難度:5級算法題 給出一個n,求1-n
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-最大公約數之和
ACM模版 描述 題解 很有趣的一道題,尤拉函式原來還可以這麼玩~~~ 既然是1~n與n的公約數,那麼肯定是n的因子。 每一個n的因子所對sum產生的增量為:gcd(n, i) = x(x
51nod 1040 最大公約數之和(尤拉函式)
水平較水,想不到,看的討論版 與n的公約數,肯定是n的因子 那我們列舉n的因子就好了 假設因子為x,那麼x的貢獻次數就是1-n有多少個數與n的gcd=x,即1-n/x有多少個數與n/x互質,即ph
[數論] 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(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(
[尤拉函式]51nod 1040 最大公約數之和 題解
(傳送門) 題目大意 求∑i=1ngcd(i,n)\sum_{i=1}^{n}\ gcd(i,n)∑i=1ngcd(i,n) 解題分析 注意,所有gcd(x,n)最後都是n的因數。所以可以對因數分類,
【51NOD】 1040-最大公約數之和(尤拉函式)
原題連線 首先補充一個知識點,尤拉函式: 在數論,對正整數n,尤拉函式是小於n的正整數中與n互質的數的數目(φ(1)=1)。此函式以其首名研究者尤拉命名(Euler’s totient function),它又稱為Euler’s totient f
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
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}^
(尤拉函式應用)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 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+1ngcd(i,j) 解題
51nod 237 最大公約數之和 V3 杜教篩
ace sin sig highlight n+1 brush print turn else Code: #include <bits/stdc++.h> #include <tr1/unordered_map> #define se
【51Nod 1040】 最大公約數之和
Description Solution 分析題目可以發現,兩個數gcd(a,b)=x,則等價於gcd(ax,bx)=1,問題就可以轉化為滿足gcd(nx,ix)=1的i的個數,對答案貢獻就是個
51nod 1011 最大公約數GCD
ytd ref style target sm2 lan shu fpm mys 9侔床乙撐6富f坎酌http://shufang.docin.com/vpe32249 寐4ree易V刮帕慘40http://www.docin.com/majo265 8氈誄20lb宋復
51nod1040 最大公約數之和
include std phi isp opened one 51nod play 分享圖片 求$\sum_{i=1}^{n}(i,n)$。n<=1e9。 $\sum_{i=1}^{n}(i,n)=\sum_{d|n}d\sum_{i=1}^{n}[(i,n)=d]=