Pagini recente » Istoria paginii runda/arhivacre/clasament | Cod sursa (job #2981841)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("sumdiv.in");
ofstream g ("sumdiv.out");
const int MaxDiv = 10;
const int MOD = 9901;
int base[MaxDiv+1];
int expo[MaxDiv+1];
int nrp;
void desc(int a,int b){
int d = 2;
while (d * d <= a){
if (a % d == 0){
nrp++;
base[nrp] = d;
while(a % d == 0){
a /= d;
expo[nrp] += b;
}
}
d++;
}
if (a > 1) {
nrp++;
base[nrp] = a;
expo[nrp] = b;
}
}
int fast_power(int a,int n){
a %= MOD;
int prod = 1;
while(n > 0){
if(n % 2 == 1){
prod = prod * a % MOD;
}
a = a * a % MOD;
n /= 2;
}
return prod;
}
int invers_modular(int a){
return fast_power(a,MOD-2);
}
int main(){
int a, b;
f >> a >> b;
desc(a,b);
int s = 1;
for(int i = 1;i <= nrp; i++){
if (fast_power(base[i],expo[i]+1) != 1) {
s = s*(fast_power(base[i],expo[i]+1)- 1 + MOD) % MOD;
s = s*invers_modular(base[i]-1) % MOD;
}
else{
s = s*(expo[i] + 1) % MOD;
}
}
g << s;
}