Pagini recente » Cod sursa (job #2639855) | Cod sursa (job #89296) | Cod sursa (job #112102) | Cod sursa (job #1219398) | Cod sursa (job #2430980)
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
#include <math.h>
const int mod=9973;
using namespace std;
const int nMax= 500005;
bitset<nMax> prim;
void ciur ()
{
for (unsigned int d=3; d*d<=1e6; d+=2)
{
for (unsigned int j=3; d*j<=1e6; j+=2)
prim[d*j/2]=1;
}
}
int suma (int p, int d)
{
int s2=1;
while (d+1)
{
s2*=p;
d--;
}
s2--;
s2/=(p-1);
return s2;
}
int main()
{
ifstream f("ssnd.in");
ofstream g("ssnd.out");
unsigned int t;
f>>t;
ciur();
for (unsigned int i=0; i<t; i++)
{
unsigned int div=0, divi=1, p=1;
unsigned long long int s=1, nr;
f>>nr;
while (nr%2==0)
{
div++;
nr/=2;
}
if (div==1)
{
p*=2;
s*=3;
s%=mod;
}
else
if (div>1)
{
p*=(div+1);
s*=suma(2,div);
s%=mod;
}
while ((nr!=1)&&(divi*2+1<=sqrt(nr)))
{
div=0;
if (!prim[divi])
{
while (nr%(divi*2+1)==0)
{
div++;
nr/=(divi*2+1);
if (nr%(divi*2+1)!=0)
{
if (div==1)
{
p*=2;
s*=divi*2+2;
s%=mod;
}
else
if (div>1)
{
p*=(div+1);
s*=suma(divi*2+1,div);
s%=mod;
}
}
}
divi++;
} else
divi++;
}
if (nr>1)
{
p*=2;
s*=(nr+1);
}
g<<p<<" "<<s%mod;;
g<<"\n";
}
return 0;
}