Pagini recente » Cod sursa (job #2514085) | Cod sursa (job #420923) | Cod sursa (job #42831) | Cod sursa (job #2055458) | Cod sursa (job #2098436)
#include <bits/stdc++.h>
#define ll long long
#define mod 9901
#define N 7075
using namespace std;
ifstream in("sumdiv.in");
ofstream out("sumdiv.out");
ll nr, p, sum, cnt;
vector <pair <ll, ll> > v;
vector <ll> primes;
bool viz[N + 3];
void precalc(){
for(int i = 2; i <= N; i++)
if(!viz[i]){
primes.push_back(i);
for(int j = i + i; j <= N; j += i)
viz[j] = 1;
}
}
void mul(ll &nr, ll val){
nr = (nr * val) % mod;
}
ll lgput(ll a, ll p){
a %= mod;
ll rs = 1;
while(p){
if(p & 1)
mul(rs, a);
mul(a, a);
p /= 2;
}
return rs;
}
void solve(){
in >> nr >> p;
sum = 1;
for(auto dv : primes){
if(dv * dv > nr)
break;
cnt = 0;
while(nr % dv == 0)
cnt++, nr /= dv;
if(cnt)
v.push_back({dv, cnt});
}
if(nr > 1)
v.push_back({nr, 1});
for(auto i : v){
if(i.first % mod == 1){
mul(sum, p + 1);
continue;
}
mul(sum, lgput(i.first, i.second * p + 1) - 1);
mul(sum, lgput(i.first - 1, mod - 2));
while(sum < 0)
sum += mod;
}
out << sum;
}
int main(){
precalc();
solve();
return 0;
}