Pagini recente » Cod sursa (job #513829) | Cod sursa (job #1306520) | Clasament wettbewerbssimulation2 | Cod sursa (job #1345945) | Cod sursa (job #1907244)
#include <iostream>
#include <cstdio>
using namespace std;
FILE *f, *g;
const int vmax = 1000001;
bool c[1000010];
int t, nDiv;
long long n, sDiv;
void ciur()
{
//Eratostene
c[1] = true;
for (int ij =3;ij<=vmax;ij+=2)
{
if(c[ij] == false)
{
for(int j= ij + ij +ij;j<=vmax;j += ij << 1)
{
c[j] = true;
}
}
}
}
int sumOfDivs(long long p, int e)
{
int pe = 1;
for (int ij = 1; ij<= e+1 ; ij++)
{
pe *= p;
}
return (pe - 1) / (p - 1);
}
void desc(long long x, int &nrDiv, long long &sumDiv)
{
nrDiv = 1, sumDiv = 1;
bool ok = true;
if(x <= 1000000){
if(c[x] == true)
{nrDiv = 2;
sumDiv = x + 1;
ok =false;
}
}
if(ok == true)
{long long p = 2; int e = 0;
while( x!=1 )
{
e = 0;
while(x % p == 0)
{
e++;
x /= p;
}
if( e>0)
{
nrDiv *= e+1;
sumDiv *= sumOfDivs(p , e);
}
p++;
}
}
}
int main()
{
f = fopen("ssnd.in" , "r");
g = fopen("ssnd.out" , "w");
ciur();
fscanf (f , "%d", &t);
for(int i = 1; i <= t; i ++)
{
fscanf(f , "%lld", &n);
desc(n , nDiv, sDiv);
fprintf(g, "%d %lld\n", nDiv, sDiv);
}
return 0;
}