Cod sursa(job #873716)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 7 februarie 2013 16:24:34
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>

#define mod 9901

FILE*f=fopen("sumdiv.in","r");
FILE*g=fopen("sumdiv.out","w");

int a,b;

inline int lgpow ( int a , int b ){
	int s = 1,p = a%mod;
	
	while ( b ){
		
		if ( b & 1 ){
			s = (s*p)%mod;
		}
		
		p = (p*p)%mod;
		b >>= 1;
	}
	
	return s;
}

inline int pg ( int a , int b ){
	if ( b == 0 )	return 0;
	if ( b == 1 )	return a;
	
	if ( b & 1 ){
		return (1LL*a*(pg(a,b-1)+1))%mod;
	}
	else{
		return (1LL*(1+lgpow(a,b>>1))*(pg(a,b>>1)))%mod;
	}
}

int main () {
	
	fscanf(f,"%d %d",&a,&b);
	
	int sol = 1;
	for ( int i = 2 ; i*i <= a && a > 1 ; ++i ){
		
		if ( !(a % i) ){
			
			int e = 0;
			while ( !(a % i) ){
				++e;
				a /= i;
			}
			
			sol = (sol*(pg(i,e*b)+1))%mod;
		}
	}
	
	if ( a > 1 ){
		sol = (sol*(pg(a,b)+1))%mod;
	}
	
	fprintf(g,"%d\n",sol);
	
	fclose(f);
	fclose(g);
	
	return 0;	
}