51Nod 1040 最大公約數之和

2021-08-09 08:48:14 字數 945 閱讀 2984

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 <= 10^9) //實際上應該是n<=10^18
output

公約數之和
input示例

6
output示例

15

尤拉函式

對於 樣例

1 2 3 2 1 ----6

有2個1 2個2 和 1個3

兩個1的情況 1,5與6互質

兩個2的情況 1(2/2),2(4/2) 與3互質(6/2)

乙個三的情況 1(3/3) 與2(6/3) 互質

列舉n的所有因子

所以 對於某個因子 i

ans+=i*phi(n/i);

1 #include 2 #include 3 #include 4

5 typedef long

long

ll;6

7ll n;89

ll get_phi(ll x) 16}

17if(x>1) sum-=sum/x;

18return

sum;19}

2021

inthh() 32}

33if(sq*sq==n) ans-=sq*get_phi(sq);

34 printf("

%lld\n

",ans);

35return0;

36}3738

int sb=hh();

39int main(int argc,char**argv)

**

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