Pagini recente » Cod sursa (job #2737164) | Cod sursa (job #586351) | Cod sursa (job #3145977) | Cod sursa (job #1357453) | Cod sursa (job #2507348)
#include<cstdio>
using namespace std;
const int nmax=100005;
const int mod=9901;
bool viz[nmax];
int d[nmax],k;
inline void gogo()
{
int i,j;
for(i=2;i<nmax;++i)
if(!viz[i])
{
d[++k]=i;
for(j=i;j<nmax;j+=i)
viz[j]=1;
}
}
inline int pow(int n,long long p)
{
long long ans=1;
n=n%mod;
while(p)
{
if(p&1)
ans = (ans*n) %mod;
n=(n*n)%mod;
p>>=1;
}
return ans;
}
int main()
{
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
int sum=1,n,b,i;
scanf("%d%d",&n,&b);
long long p,top,bot;
gogo();
for(i=1;i<=k && d[i] * d[i] <= n;++i)
{
if(n%d[i])
continue;
p=0;
while(n%d[i]==0)
{
n/=d[i];
++p;
}
p*=b;
top=(pow(d[i],p+1) - 1)%mod;
bot=pow(d[i]-1,mod-2) %mod;
sum = (((sum*top)%mod)*bot)%mod;
}
if(n!=1)
{
if(n%mod==1)
sum = (sum*(b+1))%mod;
else
{
top=(pow(n,b+1)-1) %mod;
bot=pow(n-1,mod-2)%mod;
sum=(((sum*top)%mod)*bot)%mod;
}
}
while(sum<0)
sum = sum+mod;
printf("%d",sum);
}