Pagini recente » Profil annna | Istoria paginii runda/iconcurs3/clasament | Istoria paginii utilizator/andreeachitu | Monitorul de evaluare | Cod sursa (job #405584)
Cod sursa(job #405584)
#include <algorithm>
#include <vector>
#include <bitset>
using namespace std;
#define pb push_back
#define MAX 10005
#define MOD 9901
vector <long long> prim;
bitset <MAX> viz;
long long n,m,sd;
void ciur ()
{
int i,j;
for (i=2; i<MAX; ++i)
if (!viz[i])
{
prim.pb (i);
for (j=i; j<MAX; j+=i)
viz[j]=1;
}
}
long long lgput (long long n,long long p)
{
long long rez;
n%=MOD;
for (rez=1; p; p>>=1)
{
if (p&1)
rez=(rez*n)%MOD;
n=(n*n)%MOD;
}
return rez;
}
void solve ()
{
long long i,exp;
sd=1;
for (i=0; prim[i]*prim[i]<=n; ++i)
if (n%prim[i]==0)
{
for (exp=0; n%prim[i]==0; n/=prim[i])
++exp;
exp*=m;
sd=((sd*(lgput (prim[i],exp+1)+MOD-1))%MOD*lgput (prim[i]-1,MOD-2))%MOD;
}
if (n>1)
sd=((sd*(lgput (n,m+1)+MOD-1))%MOD*lgput (n-1,MOD-2))%MOD;
printf ("%lld",sd);
}
int main ()
{
freopen ("sumdiv.in","r",stdin);
freopen ("sumdiv.out","w",stdout);
ciur ();
scanf ("%lld%lld",&n,&m);
solve ();
return 0;
}