Pagini recente » Cod sursa (job #929377) | Cod sursa (job #215692) | Cod sursa (job #920127) | Cod sursa (job #79282) | Cod sursa (job #2430652)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int nMax= 100;
bool prim[nMax];
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]=true;
}
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++)
{
int div[nMax]={0}, divi=1, nr;
nr=v[i]; p=1;
unsigned int s=0;
while (nr%2==0)
{
div[0]++;
nr/=2;
}
if (div[0]!=0)
{
p*=(div[0]+1);
s=s+putere(2,div[0]);
}
while (nr!=1)
{
if (!prim[divi])
{
if (nr%(divi*2+1)==0)
{
div[divi]++;
nr/=(divi*2+1);
if (nr%(divi*2+1)!=0)
{
p*=(div[divi]+1);
s*=(putere(divi*2+1,div[divi])/(divi*2));
}
} else
{
divi++;
}
} else
divi++;
}
g<<p<<" "<<s;
g<<"\n";
}
return 0;
}