Pagini recente » Cod sursa (job #1400948) | Cod sursa (job #820933) | Cod sursa (job #1776829) | Cod sursa (job #2816684) | Cod sursa (job #1999253)
#include <fstream>
#include <cmath>
#define P 9973
using namespace std;
ifstream fi ("ssnd.in");
ofstream fo ("ssnd.out");
struct structura{int el,nr;} divizor[100006];
int T,numar,i,j,nrprime,nrdiv;
int prim[100006],fr[100006];
void precalculare()
{
for (i=2;i<=100000;i++)
if (!fr[i])
{
for (j=i+i;j<=100000;j=j+i) fr[j]=1;
nrprime++;
prim[nrprime]=i;
}
}
int putere(int baza,int exponent)
{
baza=baza%P;
if (exponent==1) return baza%P;
if (exponent%2==0) return putere(baza*baza,exponent/2)%P;
if (exponent%2==1) return baza*putere(baza,exponent-1)%P;
}
void aflare_nrdiv(int x)
{
int iprim;
int sol=1;
nrdiv=0;
for (iprim=1;prim[iprim]<=sqrt(x+.01);iprim++)
if (x%prim[iprim]==0)
{
nrdiv++;
divizor[nrdiv].el=prim[iprim];
int cnt=0;
while (x%prim[iprim]==0)
{
x=x/prim[iprim];
cnt++;
}
divizor[nrdiv].nr=cnt;
sol=sol*(cnt+1);
}
if (x>1)
{
nrdiv++;
divizor[nrdiv].el=x;
divizor[nrdiv].nr=1;
sol=sol*2;
}
fo<<sol<<' ';
}
void aflare_sumdiv()
{
int sol=1;
for (i=1;i<=nrdiv;i++)
{
int numarator=putere(divizor[i].el,divizor[i].nr+1)-1;
int invmod=putere(divizor[i].el-1,P-2);
sol=sol*numarator*invmod;
sol=sol%P;
}
fo<<sol<<'\n';
}
int main()
{
precalculare();
fi>>T;
while (T)
{
T--;
fi>>numar;
aflare_nrdiv(numar);
aflare_sumdiv();
}
return 0;
}