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