Pagini recente » Cod sursa (job #3309027) | Cod sursa (job #3341513) | Cod sursa (job #3337636) | Cod sursa (job #1904527) | Cod sursa (job #3319650)
#include <bits/stdc++.h>
using namespace std;
#define int unsigned long long
const int MOD = 1000000007;
int expmod(int a, int k)
{
int p = 1;
while (k > 0)
{
if (k % 2 == 1)
{
p *= a;
p %= MOD;
}
a *= a;
a %= MOD;
k /= 2;
}
return p;
}
int inv_mod(int a)
{
return expmod(a, MOD - 2);
}
int sumdiv(int n)
{
int divv = 2, put = 0, allput = 1;
while (n > 1)
{
while (n % divv == 0)
{
n /= divv;
put ++;
}
if (put > 0)
{
allput *= (expmod(divv, put + 1) - 1) * inv_mod(divv - 1);
allput %= MOD;
}
divv ++;
put = 0;
if (divv * divv > n)
divv = n;
}
return allput;
}
signed main()
{
ifstream cin("sumdiv.in");
ofstream cout("sumdiv.out");
int a, b; cin >> a >> b;
int c = expmod(a, b);
cout << sumdiv(c);
}