Pagini recente » Cod sursa (job #2162644) | Cod sursa (job #1232846) | Cod sursa (job #2124402) | Cod sursa (job #1938114) | Cod sursa (job #3151854)
#include <fstream>
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
long long sumDiv;
long long A, B;
int t;
const int MOD = 9901;
unsigned long long powlg(unsigned long long n, unsigned long long p)
{
unsigned long long val = 1, x = n % MOD;
while(p)
{
if(p & 1)
val = 1ULL * val * x % MOD;
x = 1ULL * x * x % MOD;
p >>= 1;
}
return val;
}
void sdiv(long long n)
{
sumDiv = 1;
if(n % 2 == 0)
{
int p = 0;
while(n % 2 == 0)
{
p++;
n /= 2;
}
sumDiv = powlg(2, p + 1) - 1;
}
for(int d = 3; 1LL * d * d <= n; d += 2)
{
if(n % d == 0)
{
int p = 0;
while(n % d == 0)
{
p++;
n /= d;
}
sumDiv *= (1LL * (powlg(d, p + 1) - 1) % MOD * powlg(d - 1, MOD - 2)) % MOD;
}
}
if(n > 1)
{
sumDiv = (1LL * sumDiv * (n + 1)) % MOD;
}
}
int main()
{
f >> A >> B;
sdiv(powlg(A, B));
g << sumDiv % MOD;
return 0;
}