Pagini recente » Cod sursa (job #1678364) | Cod sursa (job #3199579) | Cod sursa (job #2337965) | Cod sursa (job #685419) | Cod sursa (job #1907748)
#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;
void ciur()
{
//Eratostene
c[1] = true;
for (long long ij =3;ij<=vmax;ij+=2)
{
if(c[ij] == false)
{
for(long long j= ij + ij +ij;j<=vmax;j += ij << 1)
{
c[j] = true;
}
}
}
}
long long sumOfDivs(long long p, long long e)
{
long long pe = 1;
for (long long ij = 1; ij<= e+1 ; ij++)
{
pe *= p;
}
return (pe - 1) / (p - 1);
}
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;
while( x!=1 )
{
e = 0;
while(x % p == 0)
{
e++;
x /= p;
}
if( e>0)
{
nrDiv *= e+1;
sumDiv *= sumOfDivs(p , e);
//if(sumDiv%9973)
//sumDiv %= 9973;
}
p++;
}
}
//sumDiv %= 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%9973);
}
return 0;
}