Pagini recente » Cod sursa (job #3198814) | Cod sursa (job #493570) | Cod sursa (job #99258) | Cod sursa (job #1139534) | Cod sursa (job #2369154)
#include <fstream>
#include <iostream>
#include <bitset>
using namespace std;
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");
typedef long long ll;
const int nmax = 1000000, mod = 9973;
int a[100000], x, t, k;
bitset <nmax + 2> sieve;
void CreateSieve ()
{
int i, j;
sieve[0] = sieve[1] = 1;
for (i = 4; i <= nmax; i += 2)
sieve[i] = 1;
for (i = 3; i * i <= nmax; i += 2)
if (!sieve[i])
for (j = i * i; j <= nmax; j += 2 * i)
sieve[j] = 1;
k = 1;
a[1] = 2;
for (i = 3; i <= nmax; i += 2)
if (!sieve[i]) a[++k] = i;
}
ll lgput (ll a, ll b)
{
ll p = 1;
for (; b; b >>= 1)
{
if (b & 1) p *= a;
a *= a;
}
return p;
}
void Query (ll x)
{
ll nrdiv = 1, sumdiv = 1, i = 1;
while (a[i] * a[i] <= x && x > 1)
{
if (x % a[i] == 0)
{
int e = 0;
while (x % a[i] == 0)
{
e++;
x /= a[i];
}
e++;
sumdiv = sumdiv * (lgput(a[i], e) - 1) / (a[i] - 1);
nrdiv = nrdiv * e;
}
i++;
}
if (x > 1)
{
nrdiv *= 2;
sumdiv = sumdiv * (lgput(x, 2) - 1) / (x - 1);
}
fout << nrdiv << " " << sumdiv % mod << "\n";
}
void Solve ()
{
ll x;
fin >> t;
while (t--)
{
fin >> x;
Query(x);
}
fout.close();
}
int main()
{
CreateSieve();
Solve();
return 0;
}