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

2021-07-29 06:58:42 字數 551 閱讀 9204

連線

根據題意我們要把每個數與n 的最大公約數求出來是不可能的,先找出n的所有因數,既然是n的最大公約數,那麼他們之間肯定有共同的因子,而與n 的因子互質的數他們的最大公約數就是該因子m,再乘以倍數,總和相加就是了

#include 

#include

#include

using namespace std;

#define m 1000010

#define ll long long

int vis[m], q[10010];

ll n;

ll geteu(ll m)}}

if(m > 1)

return eu;

}int main()

ll t = n / i;

ans += i * geteu(t);

ans += t * geteu(i);

}if(i*i == n)

printf("%lld\n", ans);

}return

0;}

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 ...

51nod1040最大公約數之和

題目大意 給出乙個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 公約數之和 思路 將n分解質因子,每個質因子貢獻的是多少,累加求和。每個質因子貢獻的次數...

51Nod 1040 最大公約數之和

分析題目可以發現,兩個數gc d a,b x 則等價於gc d ax bx 1,問題就可以轉化為滿足gc d nx ix 1的i的個數,對答案貢獻就是個數乘上gc d n,i 很容易可以想到尤拉函式,因為 n 是小於等於n的數中與n互質的數的數目,gc d nx ix 1的i的個數就等於 nx 那麼...