Pagini recente » Cod sursa (job #2667659) | Cod sursa (job #2877215) | Cod sursa (job #46429) | Clasament autumn2007-runda2 | Cod sursa (job #1458562)
//SumDiv
#include <iostream>
#include <fstream>
#include <bitset>
#include <cmath>
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
const int MOD = 9901;
int getpow(long long int a,long long int b)
{
if(b == 1)
{
return a % MOD;
}
if(b%2 == 0)
{
return getpow((a%MOD * a%MOD)%MOD, b/2)% MOD;
}
else if( b % 2 == 1)
{
return (getpow((a%MOD * a%MOD)%MOD, b/2) % MOD * (a % MOD )) % MOD;
}
}
int getmod(int a)
{
a = a % MOD;
if( a < 0) a = a + MOD;
return a;
}
int main()
{
int a, b, i;
f>>a>>b;
if(a == 0)
{
g<<"0";
return 0;
}
int prod = 1;
for(i = 2; 1LL * i * i <= a; i++)
{
if(a % i == 0)
{
int k = 0;
while(a % i == 0)
{
a = a/ i;
k++;
}
// Pot face MOD -2 pentru a afla inversul modular ( Mica Teorema a lui Fermat )
prod = getmod(prod%MOD * getmod((getmod(getpow(i, b*k + 1) - 1) * getmod(getpow(i-1, MOD - 2)))));
}
}
if(a > 1)
{
prod = getmod( prod%MOD * getmod(getmod(getpow(a, b + 1) - 1) * getmod(getpow(a-1, MOD - 2))));
}
g<<prod;
}