Pagini recente » Cod sursa (job #82292) | Cod sursa (job #1190029) | Cod sursa (job #904376) | Cod sursa (job #1884120) | Cod sursa (job #129456)
Cod sursa(job #129456)
#include <stdio.h>
const int revs[9901];
#define PROD(a, b) ((int) (((long) (a) * (b)) % 9901))
int pow_mod(int q, long n)
{
int tmp;
if(!n)
return(1);
tmp = pow_mod(q, n >> 1);
tmp = PROD(tmp, tmp);
return((n & 1) ? PROD(tmp, q) : tmp);
}
int calc_prog(int q, long n)
{
// ATTN: q = 1, esp. n > 9901
if(q == 1)
return((int) ((n + 1) % 9901));
return(PROD(pow_mod(q, n + 1) + 9900, revs[q ? q - 1 : 9900]));
}
int main()
{
long a, b;
int res, i, cnt;
fscanf(fopen("sumdiv.in", "r"), "%ld%ld", &a, &b);
// ATTN: (2**k)*N
for(cnt = 0; !((int) a & 1); a >>= 1, cnt++) ;
res = calc_prog(2, cnt * b);
for(i = 3; (long) i * i <= a; i += 2) {
if(a % i)
continue;
for(cnt = 1; !((a /= i) % i); cnt++) ;
res = PROD(res, calc_prog(i % 9901, cnt * b));
}
// ATTN: large primes
if(a > 1)
res = PROD(res, calc_prog((int) (a % 9901), b));
fprintf(fopen("sumdiv.out", "w"), "%d\n", res);
return(0);
}