Pagini recente » Cod sursa (job #382998) | Cod sursa (job #2116330) | Cod sursa (job #2916942) | Cod sursa (job #758522) | Cod sursa (job #1468519)
#include <fstream>
using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
const int MAXP = 10000;
const int MOD = 9901;
bool ciur[MAXP];
int p[MAXP], np;
int A, B;
int S = 1;
void Prime();
int Power( int a, int n );
void DescompSiSuma();
int main()
{
Prime();
fin >> A >> B;
DescompSiSuma();
fout << S << '\n';
fin.close();
fout.close();
return 0;
}
void Prime()
{
int i, j;
for ( i = 2; i * i < MAXP; i++ )
if ( !ciur[i] )
{
p[++np] = i;
for ( j = i * 2; j < MAXP; j += i )
ciur[j] = 1;
}
for ( ; i < MAXP; i++ )
if ( !ciur[i] )
p[++np] = i;
}
int Power( int a, int n )
{
int rez = 1;
// a %= MOD;
while ( n > 0 )
{
if ( n % 2 )
{
rez = (1LL * rez * a) % MOD;
n--;
}
a = ( 1LL * a * a ) % MOD;
n /= 2;
}
return rez;
}
void DescompSiSuma()
{
int d, i;
int n1, n2;
// fout << p[np] << '\n';
for ( i = 1; p[i] * p[i] <= A && A > 1; i++ )
{
if ( A % p[i] )
continue;
d = 0;
while ( A % p[i] == 0 )
A /= p[i], d++;
d *= B;
n1 = ( Power( p[i], d + 1 ) - 1 ) % MOD;
n2 = Power( p[i] - 1, MOD - 2 ) % MOD;
S = ( ( ( S * n1 ) % MOD ) * n2 ) % MOD;
}
if ( A > 1 )
{
d = B;
n1 = ( Power( A, d + 1 ) - 1 ) % MOD;
n2 = Power( A - 1, MOD - 2 ) % MOD;
S = ( ( ( S * n1 ) % MOD ) * n2 ) % MOD;
}
}