poj 1845 Sumdiv 數論 二分

2022-05-23 23:30:14 字數 959 閱讀 1228

剛開始學習數論,不知道該從哪方面學起,就找了這道題做做,希望通過做題能找到學習數論的方向。花了有兩天的時間終於弄懂了這題的思想,恩,數論真的很神奇!

題意是:求a^b的所有因子的和取餘9901後的結果。

用到的知識點有:

(1)素因子分解唯一性定理:任意正整數都能用一種方式且只有一種方式寫出素數的乘積。如:

60 =2^2*3*5

(2)約數和公式:將a^b 分解成素因數形式:a^b=(p1^k1)*(p2^k2)*(p3^k3)………

那麼a^b所有因子之和就是  s=(1+p1+p1^2+p1^3+…..p1^k1)*(1+p2+p2^2+p2^3+…..p2^k2)*(1+p3+…)*…………..

然後就是二分法求a^b和所有因子的和了。

我覺得下面的部落格寫的很好,比較容易理解,可以參考一下。

還有一點,就是按位與可以用來判斷k的奇偶性~~

**:

#include #include 

#include

#define maxx 7100

#define mod 9901__int64 p[maxx],f[maxx],s;

void init()//

篩選法求素數

}}__int64 exp(__int64 a,__int64 b)

//二分計算a^b;

__int64 sum(__int64 a,__int64 b)

intmain()

if(k)

cnt = (cnt*sum(p[i],k*b+1))%mod;

}if (a > 1)//

a為素數

cnt = (cnt*sum(a,b+1))%mod;

printf(

"%i64d\n

",cnt);

}return0;

}

POJ1845 Sumdiv 數學?逆元?

當初寫過一篇分治的 題意 求a b的所有因子之和,並對其取模 9901再輸出 對於數a p1 c1 p2 c2 pn cn,它的所有約數之和為 1 p1 p1 2 p1 3 p1 c1 b 1 p2 p2 2 p2 3 p2 c2 b 1 pn pn 2 pn 3 pn cn b 注意到約數之和的每...

Poj1845 Sumdiv 解題報告

真沒想到!其實我們可以先將 a b 分解成質因數的 因為 a b 的因數肯定是 a b 的質因數在一定的條件下相乘而成的 然後組合一下 h ovny 走開!別誤導別人!來一波公式 所有因數的和 pi 讀作pi,是 pi 的大寫,表示累乘 sigma 讀作sigma,是 sigma 的大寫,表示累加 ...

poj 1845 Sumdiv ,質因子分解

題意 求a b的所有約數之和。題解 a p1 a1 p2 a2 pn an.a b的所有約數之和為 sum 1 p1 p1 2 p1 a1 b 1 p2 p2 2 p2 a2 b 1 pn pn 2 pn an b 用遞迴二分求等比數列1 pi pi 2 pi 3 pi n 1 若n為奇數,一共有偶...