Pagini recente » Cod sursa (job #1161846) | Cod sursa (job #1744642) | Cod sursa (job #2323765) | Cod sursa (job #1091982) | Cod sursa (job #2691270)
#include <fstream>
#include <stdio.h>
#define MOD 9901
long long put( long long a, long long b ){
long long p = 1;
while( b > 0 ){
if( b % 2 == 1 )
p = ( p * a ) % MOD;
a = ( a * a ) % MOD;
b /= 2;
}
return p;
}
long long caca( long long n, long long q )
{
long long d = 2, p, rez = 1;
while( n > 1 ){
p = 0;
while( n % d == 0 ){
n /= d;
++p;
}
if( p > 0 ){
if( d % MOD == 0 )
rez = ( ( long long )rez * ( p * n + 1 ) ) % MOD;
else {
p *= q;
++p;
long long val = put( d, p );
if( val % MOD == 0 )
val = MOD - 1;
else --val;
long long inv = put( d - 1, MOD - 2 );
rez = ( rez * val * inv) % MOD;
}
}
d += 2;
if( n > 1 && d * d >= n )
d = n;
}
return rez;
}
int main()
{
long long n, p;
FILE *fin = fopen( "sumdiv.in", "r" );
fscanf( fin, "%lld %lld", &n, &p );
fclose( fin );
if( p == 0 )
n = 1;
std::ofstream fout( "sumdiv.out" );
fout << caca( n, p ) << '\n';
return 0;
}