Pagini recente » Cod sursa (job #1125664) | Cod sursa (job #2004737) | Cod sursa (job #116330) | Cod sursa (job #2127006) | Cod sursa (job #1907845)
#include <iostream>
#include <cstdio>
using namespace std;
FILE *f, *g;
const long long vmax = 1000001;
bool c[1000010];
long long t, nDiv;
long long n, sDiv;
long long ce[1000010], op;
void ciur()
{
//Eratostene
c[1] = true;
ce[++op] = 2;
for (long long ij =3;ij<=vmax;ij+=2)
{
if(c[ij] == false)
{
ce[ ++op ] = ij ;
for(long long j= ij + ij +ij;j<=vmax;j += ij << 1)
{
c[j] = true;
}
}
}
}
void desc(long long x, long long &nrDiv, long long &sumDiv)
{
nrDiv = 1, sumDiv = 1;
bool ok = true;
if(x <= 1000000){
if(c[x] == true)
{nrDiv = 2;
sumDiv = x + 1;
if(x == 1)
{
nrDiv--;
sumDiv--;
}
ok =false;
}
}
if(ok == true)
{long long p = 2; long long e = 0;
for(p = 1; p<=op && x!=1 && ce[p] * ce[p] <= x; p++)
{
e = 0;
long long psum = ce[p];
while(x % ce[p] == 0)
{
e++;
x /= ce[p];
psum *= ce[p];
}
if( e>0)
{
nrDiv *= e+1;
sumDiv = (sumDiv*((psum - 1)/(ce[p]-1)))%9973;
}
}
if(x>1)
{
//daca a mai ramas, trebuie sa se imparta cu el insusi
nrDiv *=2;
sumDiv = (sumDiv*((x*x - 1)/(x-1)))%9973;
}
}
}
int main()
{
f = fopen("ssnd.in" , "r");
g = fopen("ssnd.out" , "w");
ciur();
fscanf (f , "%lld", &t);
for(long long i = 1; i <= t; i ++)
{
fscanf(f , "%lld", &n);
desc(n , nDiv, sDiv);
fprintf(g, "%lld %lld\n", nDiv, sDiv);
}
return 0;
}