Pagini recente » Rezultatele filtrării | Cod sursa (job #142991) | Rezultatele filtrării | Cod sursa (job #3239403) | Cod sursa (job #3301618)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
#define ll long long
const int maxv = 2000000;
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);
if (x == 1) {return {cnt, sum};}
for (int d : primes)
{
p = 0;
while (x % d == 0)
{
x /= d;
p++;
}
cnt *= (p + 1);
sum *= (pow(d, p + 1) - 1) / (d - 1);
if (1ll * d * d > x)
{
p = 1;
cnt *= 2;
sum *= (x * x - 1 ) / (x - 1);
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';
}
}