本題應該說是乙個數學問題了。首先暴力肯定是不行的。
首先我們把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)。
到了這裡我們在用分治的方法求出來就可以了。
#include"stdio.h"
#include"string.h"
#include"algorithm"
using namespace std;
#define mod 9901
typedef long long ll;
ll a,b;
ll kms(ll a,ll b)
a = a % mod * a % mod;
b = b >> 1;
}return ans;
}ll k_sum(ll p,ll limit)
int main()
// printf("i = %d cnt = %d\n",i,cnt);
sum *= k_sum(i,cnt * b);
sum %= mod;
}printf("%lld\n",(sum + mod) % mod);
}return 0;
}
Poj1845 冪的約數之和
時間限制 1 sec 記憶體限制 128 mb 提交 狀態 我的提交 給定正整數a,b,求a b的所有因數之和,並模9901。僅一行,有兩個整數a和b 0 a,b 50000000 第1行 問題的答案 copy 如果複製到控制台無換行,可以先貼上到文字編輯器,再複製 2 3 15 2 3 8 8 的...
poj 1845 求A B的約數之和
題意 求a b的所有約數之和 mod 9901。思路 大數模運算。兩個最基本公式 a b c a c b c c 和 a b c a c b c c 用 int64的原因為 n cnt i b cnt i 為a第i個素因子的個數 可能會超int。1 對a進行素因子分解得 a p1 a1 p2 a2 ...
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...