Pagini recente » Cod sursa (job #2404846) | Cod sursa (job #2077448) | Monitorul de evaluare | Cod sursa (job #2386743) | Cod sursa (job #1001067)
#include <fstream>
#include <vector>
using namespace std;
const int mod = 9901;
int a, b;
long long s = 1;
vector <pair <long long, long long> > D;
vector <int> prim;
vector <bool> phi (1e4+5);
void PreGen() {
prim.push_back (2);
int i = 3;
for (; i < (1e4 + 5) / 2; i += 2)
if (!phi[i]) {
prim.push_back (i);
for (int j = i * 2; j < 1e4 + 5; j += i)
phi[j] = 1;
}
for (; i < 1e5 + 5; ++i)
if (!phi[i])
prim.push_back (i);
}
long long POW (long long a, long long b) {
long long sol = 1, tmp = a % mod;
for (long long i = 1; i <= b; i <<= 1) {
if (i & b)
sol = (sol * tmp) % mod;
tmp = (tmp * tmp) % mod;
}
return sol;
}
int main() {
ifstream fin ("sumdiv.in");
PreGen();
fin >> a >> b;
fin.close();
long long aux = a;
for (vector <int> :: iterator it = prim.begin(); a != 1 && *it <= a && it != prim.end(); ++it) {
if (a % *it == 0) {
D.push_back (make_pair (*it, 0));
while (a % *it == 0) {
D.back().second += b;
a /= *it;
}
if (a < 1e4 + 5 && phi[a])
break;
}
}
if (D.empty())
D.push_back (make_pair (aux, 1));
else
if (a > 1)
D.push_back (make_pair (a, 1));
for (vector <pair <long long, long long> > :: iterator it = D.begin(); it != D.end(); ++it) {
s = (s * (POW ((*it).first, (*it).second + 1) - 1)) % mod;
s = (s * (POW ((*it).first - 1, mod - 2))) % mod;
}
ofstream fout ("sumdiv.out");
fout << s;
fout.close();
}