Pagini recente » Cod sursa (job #1683509) | Cod sursa (job #77791) | Cod sursa (job #3177438) | Cod sursa (job #1864673) | Cod sursa (job #1705445)
#define MLC
#include <bits/stdc++.h>
using namespace std;
typedef long long i64;
const int MOD = 9901;
bitset<2000> c;
vector<int> p;
vector<pair<int , int> > fkt;
void erat(int lim) {
c[0] = 1;
c[1] = 1;
for(int i=4; i<=lim; ++i, ++i)
c[i] = 1;
for(int i=3; i<=lim; ++i, ++i) {
if(c[i])
continue;
for(i64 j=1LL*i*i; j<=lim; j+=i+i)
c[j] = 1;
}
for(int i=1; i<=lim; ++i)
if(!c[i])
p.push_back(i);
}
int expow(int b, int e) {
int ans = 1;
while(e) {
if(e&1)
ans=ans*b%MOD;
b=b*b%MOD;
e>>=1;
}
return ans;
}
int mod(int a, int b) {
return (a%b<0)?(b+a%b):(a%b);
}
void fact(int arg) {
int c, d;
for(int i=0; p[i]*p[i]<=arg; ++i) {
if(arg%p[i])
continue;
c=0;
while(arg%p[i]==0) {
arg/=p[i];
++c;
}
fkt.push_back(make_pair(p[i], c));
}
if(arg>1)
fkt.push_back(make_pair(arg, 1));
}
int main(void) {
FILE *fi = fopen("sumdiv.in", "r");
FILE *fo = fopen("sumdiv.out", "w");
int a, b, nu, nd;
erat(1500);
nu = 1;
nd = 1;
fscanf(fi,"%d%d",&a,&b);
fact(a);
for(auto &i:fkt)
i.second*=b;
for(auto &i:fkt) {
nu = mod(nu * (expow(i.first, i.second+1)-1), MOD);
nd = mod(nd * (i.first-1), MOD);
}
fprintf(fo,"%d\n",mod(nu*expow(nd, MOD-2), MOD));
fclose(fi);
fclose(fo);
return 0;
}