Pagini recente » Cod sursa (job #157213) | Cod sursa (job #2732092) | Cod sursa (job #1255323) | Cod sursa (job #1012372) | Cod sursa (job #1183739)
#include <cstdio>
#include <cmath>
#define MAX 5000014
#define PRIME_MAX 502000
#define op %9901
using namespace std;
bool boolish[MAX];
int prime[PRIME_MAX],np;
void ciur();
int pow(int x,int y);
int main()
{
int fact,a,b;
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
ciur();
scanf("%d%d",&a,&b);
int suma=1;
for(int j=1;j<=np and a>1 and prime[j]*prime[j]<=a;++j){
if(a%prime[j])continue;
fact=0;
while(a%prime[j]==0){
++fact;
a/=prime[j];
}
long long p1=(pow(prime[j],fact+1)-1)op;
long long p2=pow(prime[j]-1,9971)op;
suma=(((suma*p1)op)*p2)op;;
}
if(a>1){
if(a op!=1){
long long p1 =(pow(a,b+1)-1+9901)op;
long long p2 =(pow(a-1,9899))op;
suma=(((suma*p1)op)*p2)op;
}
else
suma=(1LL*suma*(b+1))op;
}
printf("%d\n",suma op);
return 0;
}
void ciur()
{
int n=2000000,i,j,lim;
lim=7071;
prime[1] = 2; np = 1;
for (i=3; i<=lim; i=i+2)
if (boolish[i]==0){
for (j=i*i; j<=n; j=j+2*i)
boolish[j]=1;
prime[++np]=i;
}
for(i=prime[np]+2; i<=n; i=i+2)
if(boolish[i]==0)
prime[++np]=i;
}
int pow(int x,int y){
int rez;
for(rez=1;y;y>>=1){
if(y&1){
rez=(1LL*rez*x)op;
}
x=(1LL*x*x)op;
}
return rez op;
}