Cod sursa(job #873680)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 7 februarie 2013 15:46:01
Problema Suma divizorilor Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 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 , long long b ){
	int s = 1,p = a%mod;
	
	while ( b ){
		
		if ( b & 1 ){
			s = (s*p)%mod;
		}
		
		p = (p*p)%mod;
		b >>= 1;
	}
	
	return s;
}

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;
			}
			
			int p = lgpow(i,1LL*e*b+1)-1; if ( p < 0 )	p += mod;
			sol = (sol*p)%mod;
			sol = (sol*lgpow(i-1,mod-2))%mod;
		}
	}
	
	if ( a > 1 ){
		int p = lgpow(a,b+1)-1; if ( p < 0 )	p += mod;
		sol = (sol*p)%mod;
		sol = (sol*lgpow(a-1,mod-2))%mod;
	}
	
	fprintf(g,"%d\n",sol);
	
	fclose(f);
	fclose(g);
	
	return 0;	
}