Cod sursa(job #200967)

Utilizator tvladTataranu Vlad tvlad Data 28 iulie 2008 09:10:46
Problema Suma divizorilor Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <cstdio>

const int ND = 1000;

int a, b, nd, d[ND], e[ND];

int f ( int a, int b ) {
	int r = 1;
	for (int i = b; i; i /= 2, a = (a*a)%9901)
		if (i % 2 == 1)
			r = (r*a)%9901;
	return r;
}

int main() {
	freopen("sumdiv.in","rt",stdin);
	freopen("sumdiv.out","wt",stdout);
	scanf("%d %d",&a,&b);
	
	int x = a;
	for (int i = 2; i*i < x; ++i) {
		if (x%i == 0) {
			d[nd] = i;
			for (e[nd]; x % i == 0; x /= i) ++e[nd];
			e[nd] *= b;
			++nd;
		}
	}
	if (x > 1) d[nd] = x, e[nd++] = b;
	int r = 1;
	for (int i = 0; i < nd; ++i) {
		if (d[i] % 9901 == 1) {
			x = e[i]+1;
		} else {
			x = (f(d[i],e[i])*d[i]+9900)%9901;
			x = (x*f(d[i]-1,9899))%9901;
		}
		r = (r*x)%9901;
	}
	printf("%d\n",r);
	return 0;
}