Pagini recente » Cod sursa (job #901169) | Cod sursa (job #96888) | Cod sursa (job #2672146) | Cod sursa (job #64899) | Cod sursa (job #2806161)
#include <stdio.h>
#include <iostream>
using namespace std;
FILE* f, * g;
long long prime[79000], nrd = 1, sd = 0, mod = 9973, n;
bool v[1000009];
void ciur()
{
int i, j;
for (i = 2;i <= 1000009;++i)
{
if (v[i] == 0)
{
prime[++prime[0]] = i;
for (j = 2 * i;j <= 1000009;j = j + i)
v[j] = 1;
}
}
}
long long putere(long long nr, long long put)
{
long long i, prod = 1;
for (i = 1;i <= put + 1;++i)
prod = (prod * prime[nr] % mod) % mod;
if (prod <= 1)
prod = mod + prod % mod;
--prod;
return prod;
}
void invmod(long long a, long long b, long long& x, long long& y)
{
long long x0, y0;
if (!b)
x = 1, y = 0;
else
{
invmod(b, a % b, x0, y0);
x = y0;
y = x0 - a / b * y0;
}
}
void divizori(long long x)
{
long long i, p;
long long xx, yy;
for (i = 1;prime[i] * prime[i] <= x;++i)
{
p = 0;
while (x % prime[i] == 0)
{
++p;
x /= prime[i];
}
if (p)
{
nrd *= (p + 1);
sd = sd % mod;
sd *= putere(i, p);
invmod(prime[i] - 1, 9973, xx, yy);
if (xx <= 0)
xx = mod + xx % mod;
sd = (sd * (xx % mod)) % mod;
}
}
if (x > 1)
{
nrd *= 2;
sd = (sd * (x + 1) % mod);
}
fprintf(g, "%lld %lld\n", nrd, sd);
}
int main()
{
int i;
long long x;
f = fopen("ssnd.in", "r");
g = fopen("ssnd.out", "w");
ciur();
fscanf(f, "%lld", &n);
for (i = 1;i <= n;++i)
{
nrd = 1;
sd = 1;
fscanf(f, "%lld", &x);
divizori(x);
}
fclose(f);
fclose(g);
return 0;
}