傳送門
主要目的還是記錄一下,學習了學長部落格寫的比我清楚很多……
題意:求a^b的因子和對9901取餘
思路:乙個數的因子和求法:對n素數分解,n=p1^a1*p2^a2*...*pk^ak
因子和=(1+p1+p1^2+...+p1^a1)*(1+p2+p2^2+...+p2^a2)*...(1+pk+...pk^ak)
=(p1^(a1+1)-1)/(p1-1)+...+(pk^(ak+1)-1)/(pk-1)
(這個公式還是搞了很久才明白咋回事,這個式子拆開會發現正好是n的各個因子,正是由於式子的每一項都是n的素因子相乘得到的)
那麼這個題求a^b的因子和,我們沒有必要求出a^b具體值,只需要進行素因子分解的時候把b冪次加入就可以了,那麼式子就化作了
a^b因子和=(p1^(a1*b+1)-1)/(p1-1)+...+(pk^(ak*b+1)-1)/(pk-1)
這裡在求的時候運用了公式a/b mod m=a mod (m*b)/b,這個公式比較適用於a是冪的形式,m*b比較小,因為這樣可以利用快速冪來求解,此公式無論m是不是素數都適用。
#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
const int mod=9901;
const int maxn=1e6+5;
bool prime[maxn];
int p[maxn];
int cnt;
void isprime()
return ans;
}ll quick_mod(ll a,ll b,ll m)
b>>=1;
a=multi(a,a,m);
}return ans;
}ll solve(ll a,ll b)
return ans%mod;
}int main()
return 0;
}
POJ 1845 逆元 分治
題意 傳送門 poj 1845 題解分解質因數 a p 1e1p 2e2 pnen a p 1 p 2 dots p n a p1e1 p2 e2 pne n 則約數和為 1 p1 p1e 1 1 p2 p2 e2 1 p n pnen 1 p 1 dots p 1 1 p 2 dots p 2 d...
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...
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 到了這裡...