Pagini recente » Borderou de evaluare (job #877031) | Autentificare | Borderou de evaluare (job #1797723) | Borderou de evaluare (job #798518) | Cod sursa (job #687160)
Cod sursa(job #687160)
#include<fstream>
#define lim 100001
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
long long A,B,nr,v[lim+1],prim[10001];
void ciur (){
prim[1]=2;
prim[-1]=1;
for(int i=3;i<=lim;i+=2)
if(v[i]==0){
prim[++prim[-1]]=i;
for(int j=i+i;j<=lim;j+=i)
v[j]=i;
}
}
long long ridicare(long long n,long long p){
long long r=1;
while(p!=0){
if(p%2==1)
r=(r*n)%9901;
n=(n*n)%9901;
p/=2;
}
return r;
}
void determinare(long long r){
long long ndiv, suma, t, i, ex;
ndiv=suma=1;
for(i=1;prim[i]*prim[i]<=r;i++){
if(r%prim[i]==0){
ex=1;
t=prim[i];
while(r%prim[i]==0){
t=t*prim[i];
ex++;
r/=prim[i];
}
ndiv*= ex;
suma*=(t-1)/(prim[i]-1)%9901;
}
}
if(r!=1){
suma*=(r*r-1)/(r-1)%9901;
ndiv*=2;
}
g<<suma%9901<<"\n";
}
int main (){
f>>A>>B;
ciur();
nr=ridicare(A,B);
determinare(nr);
return 0;
}