Pagini recente » Cod sursa (job #836407) | Cod sursa (job #1305030) | Cod sursa (job #2455676) | Cod sursa (job #1747195) | Cod sursa (job #483795)
Cod sursa(job #483795)
#include <stdio.h>
#include <cmath>
using namespace std;
#define MAX 1000001
#define MOD 9973
int ciur[MAX];
int t, i, j, k;
int p, d;
long long n, div, suma;
long long lgput (long long x, long long y)
{
int bin[100], dim = 0, l;
long long rez = 1;
while (y)
{
dim ++;
bin[dim] = y % 2;
y /= 2;
}
for (l=dim; l>=1; --l)
{
rez = (rez * rez) % MOD;
if (bin[l])
rez = (rez * x) % MOD;
}
return rez;
}
int main ()
{
FILE *f = fopen ("ssnd.in","r");
FILE *g = fopen ("ssnd.out","w");
fscanf (f,"%d", &t);
for (i=2; i<MAX; ++i)
ciur[i] = 1;
for (i=2; i*i<MAX; ++i)
if (ciur[i])
for (j=2; j*i<MAX; ++j)
ciur[i*j] = 0;
for (k=1; k<=t; ++k)
{
fscanf (f,"%lld", &n);
suma = 1;
div = 1;
j = 2;
while (n > 1)
{
while (!ciur[j])
j ++;
if (n % j == 0)
{
p = j;
d = 0;
while (n % j == 0)
{
d ++;
n /= j;
}
div *= (d + 1);
suma *= ((lgput (p, d + 1) - 1) / (p - 1)) ;
suma %= MOD;
}
j ++;
}
fprintf (g, "%lld %lld\n", div, suma);
}
fclose (g);
fclose (f);
return 0;
}