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

2021-08-09 09:59:15 字數 754 閱讀 6099

題目傳送門

我連這種水題都不會做啦……感覺要炸啊……

n 的最大公約數必定是

n的因數

x ,如果有

g個數和

n 的最大公約數為

x,那麼這

g 個數對答案的貢獻顯然為x∗

g。那麼問題就轉化成了如何快速求出和

n 的最大公約數為

x的個數

g 。

觀察等式gc

d(n,

i)=x

,可以轉化成gc

d(n/

x,i/

x)=1

,後者顯然可以用尤拉函式求出符合條件的

i 的個數g。

由於這題的資料範圍過大,n≤

1e9 ,我們不能直接o(

n)算尤拉函式,好像也不需要哈,可以對每個

n 的因數單獨算一次尤拉函式。

附上ac**:

#include 

using

namespace

std;

int n;

long

long ans;

inline

long

long eular(int x)

return x>1?ret*(x-1):ret;

}int main(void)

return

printf("%lld\n",ans),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 那麼...