Pagini recente » Cod sursa (job #647893) | Cod sursa (job #1429422) | Cod sursa (job #2819424) | Cod sursa (job #492320) | Cod sursa (job #2430661)
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
const int nMax= 25000000;
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<=n; j+=2)
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 int s=1;
while (nr%2==0)
{
div++;
nr/=2;
}
if (div!=0)
{
p*=(div+1);
s*=putere(2,div);
}
while (nr!=1)
{
if (prim[(nr-1)/2]==0)
divi=(nr-1)/2;
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++;
}
g<<p<<" "<<s%9973;
g<<"\n";
}
return 0;
}