Pagini recente » Cod sursa (job #2029850) | Cod sursa (job #2309133) | Cod sursa (job #2914727) | Cod sursa (job #413724) | Cod sursa (job #2610425)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int NMAX = 100005;
const int MOD = 9973;
int primes[NMAX], c;
bool ciur[NMAX / 2];
long long sum_div, nr_div, d, power, val;
void init()
{
primes[0] = 2;
for (int i = 1; i * i < NMAX; i++)
if (!ciur[i])
{
primes[++c] = 2 * i + 1;
for (int j = 3 * i + 1; j < NMAX; j += (2 * i + 1))
ciur[j] = 1;
}
for (int i = int(sqrt(NMAX)); i < NMAX; i++)
if (!ciur[i])
primes[++c] = 2 * i + 1;
}
long long exp_log(int n, int k)
{
long long r = 1;
while (k)
{
if (k % 2)
r = r * n;
n = n * n;
k /= 2;
}
return r;
}
void divizori(long long numar)
{
nr_div = sum_div = 1;
int j = 0;
d = primes[j];
while (numar > 1)
{
power = 0;
while (!(numar % d))
{
numar /= d;
power++;
}
if (power)
{
nr_div *= (power + 1);
sum_div = (sum_div * (exp_log(d, power + 1) - 1)) / (d - 1);
sum_div %= MOD;
}
j++;
d = primes[j];
if(d * d > numar && numar > 1)
{
nr_div *= 2;
sum_div = (sum_div * (numar + 1)) % MOD;
numar = 1;
}
}
fout << nr_div << ' ' << sum_div << '\n';
}
int main()
{
int nr; fin >> nr;
init();
for (int i = 0; i < nr; i++)
{
fin >> val;
divizori(val);
}
return 0;
}