Pagini recente » Cod sursa (job #2258098) | Cod sursa (job #744798) | Cod sursa (job #216175) | Cod sursa (job #1777220) | Cod sursa (job #2666866)
#include <stdio.h>
#define MOD 9901
#define MAX_D 7100
int ciur[MAX_D + 1], prime[MAX_D];
int lgput( int a, int e ) {
int r;
if ( e == 0 )
return 1;
r = lgput( a, e / 2 );
r = (long long)r * r % MOD;
if ( e % 2 == 1 )
r = (long long)r * a % MOD;
return r;
}
int main() {
FILE *fin, *fout;
int a, b, sumaDiv, e, nrp, d, i, j;
nrp = 0;
for ( i = 2; i <= MAX_D; i++ ) {
if ( ciur[i] == 0 ) {
prime[nrp] = i;
nrp++;
for ( j = i * i; j * j <= MAX_D; j++ )
ciur[i] = 1;
}
}
fin = fopen( "sumdiv.in", "r" );
fscanf( fin, "%d%d", &a, &b );
fclose( fin );
sumaDiv = 1;
d = 0;
while ( prime[d] * prime[d] <= a ) {
e = 0;
while ( a % prime[d] == 0 ) {
a /= prime[d];
e++;
}
e *= b;
if ( e > 0 ) {
if ( prime[d] % MOD == 1 )
sumaDiv = (long long)sumaDiv * (e + 1) % MOD;
else
sumaDiv = ((long long)sumaDiv * (lgput( prime[d], e + 1 ) - 1 + MOD)) % MOD * lgput( prime[d] - 1, MOD - 2 ) % MOD;
}
d++;
}
if ( a > 1 ) {
if ( a % MOD == 1 )
sumaDiv *= (long long)sumaDiv * (b + 1) % MOD;
else
sumaDiv = ((long long)sumaDiv * (lgput( a, b + 1 ) - 1 + MOD)) % MOD * lgput( a - 1, MOD - 2 ) % MOD;
}
fout = fopen( "sumdiv.out", "w" );
fprintf( fout, "%d", sumaDiv );
fclose( fout );
return 0;
}