Pagini recente » Cod sursa (job #404490) | Cod sursa (job #85850) | Cod sursa (job #491018) | Cod sursa (job #207399) | Cod sursa (job #2931089)
#include <iostream>
#include <fstream>
#define MOD 9901
using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
int prime[1001], fact[1001], noPrime=1, nr=3, bonusFact=0, s=1;
bool isPrime;
int pow(int nr, int p){
int s=1;
while(p){
s=s*nr%MOD;
p--;
}
return s;
}
int invMod(int nr) {
return pow(nr, MOD - 2);
}
void primegen(){
prime[1]=2;
while(noPrime!=1000){
isPrime=true;
for(int i=1;i<=noPrime;i++){
if(nr%prime[i]==0){
isPrime=false;
break;
}
}
if(isPrime){
noPrime++;
prime[noPrime]=nr;
}
nr+=2;
}
}
void primefact(int a){
for(int i=1;i<1000&&prime[i]*prime[i]<=a;i++){
if(a%prime[i]==0){
while(a%prime[i]==0){
a/=prime[i];
fact[i]++;
}
}
}
if(a!=1){
bonusFact=a;
}
}
int main()
{
int a, b;
fin>>a>>b;
primegen();
primefact(a);
for(int i=1;i<1000;i++){
if(fact[i]!=0){
fact[i]*=b;
s*=((pow(prime[i], fact[i]+1)-1)*invMod(prime[i]-1))%MOD;
}
}
if(bonusFact)
s*=(pow(bonusFact, b+1)-1)*invMod(bonusFact-1)%MOD;
fout<<s;
return 0;
}