Cod sursa(job #539766)

Utilizator SadmannCornigeanu Calin Sadmann Data 23 februarie 2011 12:40:39
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<cstdio>
const int mod = 9901;
using namespace std;

int i , a , b , n , ans = 1;

int power (int a , int b){
	int i , ans = 1 , n = a % mod;

	for( i = 0 ; (1 << i) <= b ; ++i ) {
		if ( b & (1 << i))
			ans *= n , ans %= mod;
		n = (n * n) % mod;
	}

return ans;
}

int sum (int a , int b) {
	if ( b == 1 ) return a % mod;
	if ( b & 1 )
		return (sum(a , b - 1) + power(a , b)) % mod;
	return ((power(a , b / 2) + 1) * sum(a , b / 2)) % mod;
}

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

	scanf("%d %d",&a,&b);

	if ( b == 0 ) {
		printf("1\n");
		return 0;
	}

	for( i = 2 ; i * i <= a ; ++i )
		if ( a % i == 0 ) {
			int cnt = 0;

			for( ; a % i == 0 ; )
				a /= i , ++ cnt;

			ans =  ans * (sum(i , cnt * b) + 1) % mod;
		}

	if ( a != 1 )
			ans = ans * (sum ( a , b ) + 1) % mod;

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

return 0;
}