Pagini recente » Cod sursa (job #1733362) | Cod sursa (job #3280352) | Cod sursa (job #2836473) | Cod sursa (job #1425713) | Cod sursa (job #2368821)
#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[80000], 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;
}
int lgput (ll a, int b)
{
int p = 1;
for (; b; b >>= 1)
{
if (b & 1) p = 1LL * p * a % mod;
a = 1LL * a * a % mod;
}
return p;
}
void Query (ll x)
{
int 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) % mod;
nrdiv = nrdiv * e;
}
i++;
}
if (x > 1)
{
nrdiv *= 2;
sumdiv = sumdiv * ((lgput(x, 2)) - 1) / (x - 1) % mod;
}
fout << nrdiv << " " << sumdiv << "\n";
}
void Solve ()
{
ll x;
fin >> t;
while (t--)
{
fin >> x;
Query(x);
}
fout.close();
}
int main()
{
CreateSieve();
Solve();
return 0;
}