剛開始學習數論,不知道該從哪方面學起,就找了這道題做做,希望通過做題能找到學習數論的方向。花了有兩天的時間終於弄懂了這題的思想,恩,數論真的很神奇!
題意是:求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為奇數,一共有偶...