Pagini recente » Cod sursa (job #2050580) | Cod sursa (job #890816) | Cod sursa (job #861120) | Cod sursa (job #1985190) | Cod sursa (job #3301620)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
#define ll long long
const int maxv = 2000000;
const int MOD = 9973;
int p[maxv + 10];
vector<int> primes;
void sieve()
{
for (int j = 4; j <= maxv; j += 2)
{
p[j] = 1;
}
for (int i = 3; i * i <= maxv; i += 2)
{
if (!p[i])
{
for (int j = i * i; j <= maxv; j += i)
{
p[j] = 1;
}
}
}
primes.push_back(2);
for (int i = 3; i <= maxv; i += 2)
{
if (!p[i]) {primes.push_back(i);}
}
}
ll pow(ll b, ll e)
{
if (e == 0) {return 1;}
ll p = pow(b, e / 2);
p *= p;
if (e % 2 == 1) {p *= b;}
return p;
}
pair<int, ll> calc(ll x)
{
int p = 0;
ll cnt = 0;
ll sum = 0;
while (x % 2 == 0)
{
x /= 2;
p++;
}
cnt = p + 1;
sum = (pow(2, p + 1) - 1) / (2 - 1);
sum %= MOD;
if (x == 1) {return {cnt, sum};}
for (int d : primes)
{
p = 0;
while (x % d == 0)
{
x /= d;
p++;
}
if (p)
{
cnt *= (p + 1);
sum *= (pow(d, p + 1) - 1) / (d - 1);
sum %= MOD;
}
if (x == 1)
{
return {cnt, sum};
}
if (1ll * d * d > x)
{
p = 1;
cnt *= 2;
sum *= (pow(x, 2)) / (x - 1);
sum %= MOD;
return {cnt, sum};
}
}
}
int main()
{
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int n = 0;
ll x = 0;
pair<int, ll> res;
fin >> n;
sieve();
for (int i = 0; i < n; i++)
{
fin >> x;
res = calc(x);
fout << res.first << ' ' << res.second << '\n';
}
}