Pagini recente » Borderou de evaluare (job #2051281) | Cod sursa (job #2119844) | Cod sursa (job #1188355) | Cod sursa (job #3210464) | Cod sursa (job #1302990)
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<vector>
#include<bitset>
#include<math.h>
#define nmax 8000
using namespace std;
bitset<nmax> ciur;
int inmex(int b,int e)
{
int m=9901,rez=1;
while(e>0)
{
if(e%2==1)
{
rez=(rez*b)%m;
}
e=e/2;
b=(b*b)%m;
}
return rez;
}
int main()
{
ifstream si;
si.open("sumdiv.in");
FILE* so=fopen("sumdiv.out","w");
int n,p;
si>>n>>p;
int c=0;
int x=1,s=1;
if(n%2==0)
{
while(n%2==0)
{
++c;
x=(x*2)%9901;
n=n/2;
}
s=(s*(inmex(x,p)*2-1))%9901;
// cout<<2<<' '<<c<<'='<<x<<endl;
}
int j,i,z=(int)sqrt(n);
for(i=3;i<=z;i=i+2)
{
if(ciur[i]==0)
{
for(j=3;i*j<=z;j=j+2)
{
ciur[i*j]=1;
}
if(n%i==0)
{
c=0;
x=1;
while(n%i==0)
{
++c;
x=(x*i)%9901;
n=n/i;
}
s=(s*(inmex(x,p)*i-1)/(i-1))%9901;
// cout<<i<<' '<<c<<'='<<x<<endl;
}
}
}
if(n!=1)
{
s=(s*(inmex(n,p)*n-1)/(n-1))%9901;
//cout<<n<<' '<<1<<'='<<x;
}
fprintf(so,"%i\n",s);
}