Pagini recente » Cod sursa (job #1225865) | Cod sursa (job #1807412) | Cod sursa (job #1892769) | Cod sursa (job #1368780) | Cod sursa (job #2155311)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("sumdiv.in");
ofstream cout ("sumdiv.out");
const long long MAX = 10000;
bool ciur [MAX + 5];
vector <long long> prim;
void Ciur(){
for (long long i=2; i<=MAX; i++){
if (!ciur[i]){
prim.push_back(i);
for (long long j=i+i; j<=MAX; j+=i){
ciur[j] = true;
}
}
}
}
vector <pair<long long , long long>> DIV;
const long long MOD = 9901;
long long rid (long long base , long long put){
long long ans = 1;
while (put){
if (put % 2){
ans *= base;
ans %= MOD;
}
base *= base;
base %= MOD;
put /= 2;
}
return ans;
}
int main() {
long long a , b;
cin>>a>>b;
Ciur();
long long cop = a;
for (auto &x : prim){
if (x * x > a){
break;
}
long long cont = 0;
while (!(cop % x)){
cop /= x;
cont++;
}
if (!(x % MOD)){
continue;
}
if (cont){
DIV.push_back({x , cont*b});
}
}
if (cop > 1){
DIV.push_back({cop , b});
}
long long sus = 1;
long long jos = 1;
for (auto &x : DIV){
if (!((x.first - 1) % MOD)){
sus *= x.second + 1;
continue;
}
long long ridicat = rid(x.first , x.second + 1);
sus *= ridicat - 1;
sus %= MOD;
jos *= x.first - 1;
jos %= MOD;
}
jos = rid(jos , MOD-2);
sus *= jos;
sus %= MOD;
cout<<sus;
return 0;
}