Poj1845 冪的約數之和

2021-07-26 16:04:42 字數 1428 閱讀 9944

時間限制: 1 sec  記憶體限制: 128 mb

[提交][狀態][我的提交]

給定正整數a, b,求a^b的所有因數之和,並模9901。

僅一行,有兩個整數a和b(0 <= a,b <= 50000000)

第1行:問題的答案

copy (如果複製到控制台無換行,可以先貼上到文字編輯器,再複製)

2 3

15

2^3 = 8

8 的約數是1, 2, 4, 8,相加得到15

對於乙個大於1正整數n可以分解質因數:n=p1^a1*p2^a2*p3^a3*…*pk^ak,

則由約數個數定理可知n的正約數有(a₁+1)(a₂+1)(a₃+1)…(ak+1)個,

那麼n的(a₁+1)(a₂+1)(a₃+1)…(ak+1)個正約數的和為

f(n)=(p1^0+p1^1+p1^2+…p1^a1)(p2^0+p2^1+p2^2+…p2^a2)…(pk^0+pk^1+pk^2+…pk^ak)

證明:若n可以分解質因數:n=p1^a1*p2^a2*p3^a3*…*pk^ak,

可知p1^a1的約數有:p1^0, p1^1, p1^2......p1^a1

... ...

同理可知,pk^ak的約數有:pk^0, pk^1, pk^2......pk^ak ;

實際上n的約數是在p1^a1、p2^a2、...、pk^ak每乙個的約數中分別挑乙個相乘得來,

可知共有(a₁+1)(a₂+1)(a₃+1)…(ak+1)種挑法,即約數的個數。

它們的和為:

f(n)=(p1^0+p1^1+p1^2+…p1^a1)(p2^0+p2^1+p2^2+…p2^a2)…(pk^0+pk^1+pk^2+…pk^ak)

本題將a分解質因數,並記錄每種質因數的總個數,乘b,即a^b中共有該種質因數的個數,再利用約數和公式計算。

值得注意的是,本題對結果取模9901,而等比數列前n項和公式中涉及除法運算,故不能在快速冪中取模,那麼long long會溢位,所以此處

採用二分法求等差數列前n項和。(notes for more information)

#include#include#include#include#include#includeusing namespace std;

const int mod=9901;

int a,b;

long long ans=1;

long long qmul(long long p,long long k)

return s;

}long long get_sum(long long p,long long k)

void get_pr(int num)

return ;

}int main()

poj1845 約數之和

本題應該說是乙個數學問題了。首先暴力肯定是不行的。首先我們把a分解質因數,表示為p1 c1 p2 c2 pn cn.那麼a b就可以表示為 p1 c1 b p2 c2 b pn cn b 那麼很明顯了,所有約數的集合就是p1 k1,p2 k2 pn kn.其中0 ki b ci 1 i n 到了這裡...

poj 1845 求A B的約數之和

題意 求a b的所有約數之和 mod 9901。思路 大數模運算。兩個最基本公式 a b c a c b c c 和 a b c a c b c c 用 int64的原因為 n cnt i b cnt i 為a第i個素因子的個數 可能會超int。1 對a進行素因子分解得 a p1 a1 p2 a2 ...

POJ 1845乘法逆元 約數和

乘法逆元計算等比數列的求和公式 給兩個正整數a和b,計算ab的所有因子和的值對9901取模 約數和公式 s 1 p1 p1 2 p1 k1 1 p2 p2 2 p2 k2 1 pn pn 2 pn 3 pn kn 等比數列公式 pb c 1 1 p1 1 當模數mod為質數時,bmod 2逆元即為b...