Pagini recente » Cod sursa (job #346500) | Cod sursa (job #713329) | Cod sursa (job #557874) | Cod sursa (job #53104) | Cod sursa (job #2430847)
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
#include <math.h>
#include <limits>
using namespace std;
const int nMax= 1000005;
bitset<nMax> prim;
void ciur (unsigned int n)
{
for (unsigned int d=3; d*d<=n; d+=2)
for (unsigned int j=3; d*j*d*j<=n; j+=2)
if (d*j/2<nMax)
prim[d*j/2]=1;
}
int putere(int i, int j)
{
int pi=1;
j++;
while (j--)
pi*=i;
return pi-1;
}
int main()
{
ifstream f("ssnd.in");
ofstream g("ssnd.out");
unsigned int t,p;
f>>t;
vector <unsigned int> v;
unsigned int maxi=0;
for (unsigned int i=0; i<t; i++)
{
f>>p;
v.push_back(p);
if (p>maxi)
maxi=p;
}
ciur(maxi);
for (unsigned int i=0; i<t; i++)
{
unsigned int div=0, divi=1, nr;
nr=v[i]; p=1;
unsigned long long int s=1;
while (nr%2==0)
{
div++;
nr/=2;
}
if (div!=0)
{
p*=(div+1);
s*=putere(2,div);
}
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)
{
p*=(div+1);
s*=(putere(divi*2+1,div)/(divi*2));
}
}
divi++;
} else
divi++;
}
if (nr>1)
{
p*=2;
int c=(putere(nr,1)/(nr-1));
s*=c;
}
g<<p<<" "<<s%9973;
g<<"\n";
}
return 0;
}