Pagini recente » Istoria paginii runda/star_trek/clasament | Cod sursa (job #900945) | Cod sursa (job #590166) | Cod sursa (job #1504953) | Cod sursa (job #2691279)
#include <stdio.h>
#define MOD 9901
long long caca( long long a, long long b ) {
long long rez = 1;
while( b > 0 ){
if( b % 2 == 1 )
rez =rez * a % MOD;
a = a * a % MOD;
b /= 2;
}
return rez;
}
int main()
{
long long n, p, d = 2;
long long e, rez = 1;
FILE *fin = fopen( "sumdiv.in", "r" );
fscanf( fin, "%lld %lld", &n, &p );
fclose( fin );
if( p == 0 )
n = 1;
while( n > 1 ) {
e = 0LL;
while( n % d == 0 ){
n /= d;
++e;
}
if( e > 0 ){
if( d % MOD == 1 )
rez = rez * ( e * p + 1 ) % MOD;
else {
e *= p;
++e;
long long val = caca( d, e );
if( val % MOD == 0 )
val = MOD;
--val;
long long inv = caca( d - 1, MOD - 2 );
rez = rez * inv * val % MOD;
}
}
++d;
if( d > 3 )
++d;
if( n > 1 && d * d >= n )
d = n;
}
FILE *fout = fopen( "sumdiv.out", "w" );
fprintf( fout, "%lld\n", rez );
fclose( fout );
return 0;
}