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;
}
相關文章
- 6-8 使用函式求最大公約數 (10分)函式
- 尤拉函式φ函式
- Note -「因數的尤拉函式求和」函式
- NumPy 差分、最小公倍數、最大公約數、三角函式詳解函式
- 最大公約數GCDGC
- 4939 尤拉函式函式
- HDU 4279 2012網路賽Number(數論 尤拉函式結論約數個數)函式
- C. 最大公約數
- 尤拉函式入門函式
- 尤拉函式詳解函式
- poj 2478 尤拉函式函式
- 淺談尤拉函式函式
- 數論線性篩總結 (素數篩,尤拉函式篩,莫比烏斯函式篩,前n個數的約數個數篩)函式
- §3. 復變數的指數函式·尤拉公式變數函式公式
- c語言遞迴函式實現求最大公約數(Euclid演算法)C語言遞迴函式演算法
- 求最大公公約數(最大公因數)—— 歐幾里得演算法演算法
- abc172D 約數之和
- AcWing871. 約數之和
- 最大公約數和最小公倍數
- POJ2487Farey Sequence(尤拉函式&&法雷級數)函式
- 最大公約數的演算法演算法
- 【shell 指令碼】求最大公約數指令碼
- 尤拉函式性質和模版函式
- HDU2588GCD(尤拉函式)GC函式
- php判斷二個數最大公約數PHP
- 轉載:尤拉函式知識點總結及程式碼模板及尤拉函式表函式
- 尤拉計劃717:取模公式之和公式
- java演算法 求最大公約數Java演算法
- 【演算法拾遺】最大公約數演算法
- 最大公約數與歐幾里得演算法演算法
- C++:最小公倍數與最大公約數C++
- bzoj2818: Gcd(尤拉函式)GC函式
- POJ 2478-Farey Sequence(尤拉函式)函式
- B.日記和尤拉函式函式
- 尤拉計劃512題(冪的尤拉總計函式和)函式
- 素數個數 <埃式篩 && 尤拉篩>
- 最大公約數和最小公倍數--java實現Java
- 最大公約數與最小公倍數演算法演算法