Cod sursa(job #538661)

Utilizator klamathixMihai Calancea klamathix Data 21 februarie 2011 20:04:40
Problema Suma divizorilor Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 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);

	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;
}