Pagini recente » Cod sursa (job #2715251) | Cod sursa (job #47173) | Cod sursa (job #400678) | Cod sursa (job #2629553) | Cod sursa (job #2664492)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("sumdiv.in");
ofstream out("sumdiv.out");
const int MODX = 9901;
int putere( int p, int n ){
int nr = 1;
while( p > 0 ){
if( p % 2 == 1 )
nr = nr * n;
n = n * n;
p = p / 2;
}
return nr;
}
void euclid(int a, int b, int *d, int *x, int *y){
if( b == 0 ){
*d = a;
*x = 1;
*y = 0;
}
else {
int x0, y0;
euclid( b, a % b, d, &x0, &y0 );
*x = y0;
*y = x0 - ( a / b ) * y0;
}
}
int main()
{
int a, b, div, e, sum1, sum2, x, y, d, i, j, sum;
in>>a>>b;
div = 2;
sum1 = 1;
sum2 = 1;
while( a > 1 ){
e = 0;
while( a % div == 0 ){
e++;
a = a / div;
}
e = e * b + 1;
i = putere( e, div ) - 1;
j = div - 1;
sum1 = sum1 * ( i % MODX );
sum2 = sum2 * ( j % MODX );
div++;
}
euclid( sum2, MODX, &d, &x, &y );
if( x < 0 )
x = MODX + x % MODX;
sum = ( sum1 * x ) % MODX;
out<<sum;
return 0;
}