POJ 1845 Sumdiv 因數和定理

2021-09-13 14:17:40 字數 1419 閱讀 1229

求 a^b 的所有約數和,輸出結果 mod 9901

約數和定理:

a^b 的質因子無非是a的每個質因子的個數擴大了b倍,直接套公式,等比數列求和有:

上面公式僅在b|a時成立,我們可以反向驗證這個公式

設 x = a / b,則 a = b * x,那麼 a % bc = bx % bc,設 bx % bc = k,則 bx = y*bc + k,等式兩邊同時除以 b 得到:x = y*c + k/b,即:x % c = k/b,得證:a/b % c = a % bc / b(y*bc + k) % b = (bx % b) = 0,得到 k % b = 0,即a % bc / b 一定是個整數

這個公式就不涉及到逆元,而(p-1)|(p^n - 1)(容易證明),套上公式即可

#include #include using namespace std;

typedef long long ll;

const ll mod = 9901;

ll t,a,b,p[1000],num[1000];

int cal()

len++;}}

if(a > 1)

return len;

}ll qmul(ll a,ll b,ll mod)

return res;

}ll qpow(ll a,ll x,ll mod)

return res;

}ll solve()

return res;

}int main()

設 sum(p,n) = 1 + p + p^1 + ...... + p^n,則有:

n為奇數:sum(p,n) = (1 + p^(n/2+1)) * sum(p,n/2)

n為偶數:sum(p,n) = (1 + p^(n/2+1)) * sum(p,n/2-1) + p^(n/2)

展開不難驗證公式的正確性,複雜度為o(logn)

#include #include using namespace std;

typedef long long ll;

const ll mod = 9901;

ll t,a,b,p[1000],num[1000];

int cal()

len++;}}

if(a > 1)

return len;

}ll qpow(ll a,ll x)

return res;

}ll sum(ll p,ll n)

ll solve()

int main()

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