求
ab
的约数和。
a=∏ipkii
ab=∏ipbkii
Sab=∏i∑j=0bkipji=∏ipbki+1i−1pi−1
#include <cstdio>
typedef long long ll;
const ll mod = 9901;
ll mul(ll a, ll b, ll p = mod) {
ll c = 0;
for (; b; a = a * 2 % p, b /= 2)
if (b & 1) c = (c + a) % p;
return c;
}
ll pow(ll a, ll b, ll p) {
ll c = 1;
for (; b; b /= 2, a = mul(a, a, p))
if (b & 1) c = mul(c, a, p);
return c;
}
ll gps(ll q, ll n) {
return (pow(q, n + 1, (q - 1) * mod) - 1) / (q - 1);
}
int main() {
ll a, b, i, s, k;
while (scanf("%lld%lld", &a, &b) != EOF) {
s = 1;
for (i = 2; i * i <= a; i++)
if (a % i == 0) {
for (k = 0; a % i == 0; a /= i, ++k);
s = mul(s, gps(i, k * b));
}
if (a != 1) s = mul(s, gps(a, b));
printf("%lld\n", s);
}
return 0;
}
Sumdiv
Description
Consider two natural numbers A and B. Let S be the sum of all natural divisors of A^B. Determine S modulo 9901 (the rest of the division of S by 9901).
Input
The only line contains the two natural numbers A and B, (0 <= A,B <= 50000000)separated by blanks.
Output
The only line of the output will contain S modulo 9901.
Sample Input
2 3
Sample Output
15
Hint
2^3 = 8.
The natural divisors of 8 are: 1,2,4,8. Their sum is 15.
15 modulo 9901 is 15 (that should be output).