Pagini recente » Cod sursa (job #1728738) | Cod sursa (job #1651297) | Cod sursa (job #2713288) | Cod sursa (job #1723047) | Cod sursa (job #701075)
Cod sursa(job #701075)
#include<fstream>
#include<cmath>
#define NMAX 1000010
#define MMAX 100000
#define MOD 9973
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int prim[MMAX], np;
bool ciur[NMAX];
void Ciur()
{
int i,j;
np=1; prim[np]=2;
for (j=4; j<NMAX; j+=2) ciur[j]=1;
for (i=3; i<NMAX; i+=2)
if (!ciur[i])
{
prim[++np]=i;
for (j=i+i; j<NMAX; j+=i) ciur[j]=1;
}
}
int Solve(int x, int &nr, int &sum)
{
int rez,p, i,rad;
//nr de divizori
nr=1; sum=(1+x)%MOD; rad=sqrt((double)x);
for (i=1; i<=prim[i]*prim[i]; ++i)
{
rez=1;p=prim[i];
while (x%p==0)
{
++rez;
if (p*p<=x)sum=(sum+p+(x/p))%MOD;
p*=prim[i];
}
nr*=rez;
}
if (rad*rad==x) sum=(sum+MOD-rad)%MOD;
}
void Citeste()
{
int x, nr, sum, t;
f>>t;
while (t--)
{
f>>x;
Solve(x, nr, sum);
g<<nr<<" "<<sum<<"\n";
}
}
int main()
{
Ciur();
Citeste();
f.close();
g.close();
return 0;
}