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