Pagini recente » Cod sursa (job #1128793) | Cod sursa (job #973639) | Cod sursa (job #2449796) | Cod sursa (job #1509574) | Cod sursa (job #769878)
Cod sursa(job #769878)
#include<iostream>
#include<fstream>
#include<bitset>
using namespace std;
#define mod 9901
#define stop 7100
bitset <stop+1> viz;
int p[stop];
void ciur()
{
int i,j,k=0;
for(i=2;i<=stop;i++)
if(viz[i]==0) {
p[++k]=i;
for(j=i+i;j<=stop;j=j+i)
viz[j]=1;
}
}
int putere(int x, int p)
{
int aux;
if(p==1)
return x;
else if(p%2==1)
return (1LL*(x%mod)*(putere(x,p-1)%mod))%mod;
else {
aux=putere(x,p/2)%mod;
return (1LL*aux*aux)%mod;
}
}
void gcd(long long &x, long long &y, int a, int b) {
if (b==0) {
x=1;
y=0;
}
else {
gcd(x,y,b,a%b);
long long aux=x;
x=y;
y=aux-y*(a/b);
}
}
int main ()
{
int i,a,b,d,s,aux;
long long inv,ins;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
f>>a>>b;
f.close();
s=1;
ciur();
for(i=1;i<=stop && p[i]*p[i]<=a;i++)
if(a%p[i]==0) {
d=0;
while(a%p[i]==0) {
a=a/p[i];
d++;
}
aux=putere(p[i],d*b+1);
aux=(aux%mod-1+mod)%mod;
gcd(inv,ins,p[i]-1,mod);
if(inv<=0)
inv=mod+inv%mod;
aux=(aux*(inv%mod))%mod;
s=(s%mod*aux%mod)%mod;
}
if(a>1) {
if(a%mod!=1) {
aux=putere(a,b+1);
aux=(aux%mod-1+mod)%mod;
gcd(inv,ins,a-1,mod);
if(inv<=0)
inv=mod+inv%mod;
aux=(aux*(inv%mod))%mod;
s=(s*aux)%mod;
}
else s=(s%mod*(b+1)%mod)%mod;
}
g<<s%mod;
g.close();
return 0;
}