Cod sursa(job #217111)

Utilizator pauldbPaul-Dan Baltescu pauldb Data 27 octombrie 2008 01:05:21
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <stdio.h>

#define mod 9901

int A, B, S, sol;

int power(int A, int B)
{
	if (B == 0) 
	{
		S = 1;
		return 1;
	}
	else if (B & 1)
		 {
			 int aux = power(A, B/2);
			 S = (1LL * S * (aux * A + 1)) % mod;
			 return (1LL * aux * aux * A) % mod;
		 }
		 else {
			  		int aux = power(A, B-1);
					S =	(S * A + 1) % mod; 
					return (aux * A) % mod; 
		 	  }
}

int main()
{
	freopen("sumdiv.in", "r", stdin);
	freopen("sumdiv.out", "w", stdout);

	int i, p;

	scanf("%d %d ", &A, &B);

	sol = 1;

	for (i = 2; i*i <= A; i++)
		if (A % i == 0)
		{
			for (p = 0; A%i == 0; A /= i) p++;

			power(i % mod, p * B);
			sol = (sol * S) % mod;
		}

	if (A > 1)
	{
		power(A % mod, B);
		sol = (sol * S) % mod;
	}

	printf("%d\n", sol);

	return 0;
}