POJ1845 Sumdiv 數學?逆元?

2022-03-30 08:04:41 字數 945 閱讀 1813

當初寫過一篇分治的

題意:求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))

注意到約數之和的每一項都是等比數列,可以用通項搞他,先用快速冪計算分子,再求出分母的乘法逆元。

特別地,當分母pi-1為9901的倍數時,乘法逆元不存在,但是1,pi,pi^2...pi^(ci*b) ≡ 1 (mod 9901) 

所以此時貢獻即為b*ci+1 mod 9901

#include#include

#define ll long long

#define r register int

using

namespace

std;

const

int m=9901

;inline

intg()

inta,b,cnt;

int p[20],c[20

];ll ans=1

;inline

void div(int

n)

if(n>1) p[++cnt]=n,c[cnt]=1;}

inline

int qpow(int a,ll p)

signed main()

r x=(qpow(p[i],(ll)b*c[i]+1)-1+m)%m;

r y=qpow(p[i]-1,m-2

); ans=(ll)ans*x%m*y%m;

} printf(

"%lld\n

",ans);

}

2019.05.11

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為奇數,一共有偶...

POJ1845Sumdiv(逆元or等比數列求和)

附上acdreamer的講解 題目 題意 給定兩個正整數9901取餘後的值。分析 很容易知道,先把 的所有因子和的表示式如下 所以我們有兩種做法。第一種做法是二分求等比數列之和。如果採用等比數列首項為一次項的計算方法,則需要另外加上1 include include includeusing nam...