Pagini recente » Cod sursa (job #480847) | Cod sursa (job #640736) | Cod sursa (job #1396750) | Cod sursa (job #1387251) | Cod sursa (job #2352593)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
const int bound = 1e6;
const int mod = 9973;
bitset <bound + 3> vis;
int k = 0;
int divs[bound];
void ciur()
{
divs[++k] = 2;
for(int i = 3; i < bound; i += 2)
if(vis[i] == 0)
{
divs[++k] = i;
if(1LL * i * i < bound)
for(int j = i * i; j < bound; j += 2 * i)
vis[j] = 1;
}
}
int lgpow(int a, int b)
{
int sol = 1;
a %= mod;
while(b)
{
if(b % 2 == 1)
sol = (sol * a) % mod;
b /= 2;
a = (a * a) % mod;
}
return sol;
}
void solve()
{
long long n;
in >> n;
int number = 1;
int sum = 1;
for(int i = 1; i <= k && 1LL * divs[i] * divs[i] <= n; i++)
{
if(n % divs[i] != 0)
continue;
int nr = 0;
while(n % divs[i] == 0)
{
n /= divs[i];
nr++;
}
number *= (nr + 1);
int up = (lgpow(divs[i], nr + 1) - 1);
if(up < 0)
up += mod;
int inv = (lgpow(divs[i] - 1, mod - 2));
sum = (((sum * up) % mod) * inv) % mod;
}
if(n > 1)
{
number *= 2;
sum = (sum * (n + 1)) % mod;
}
out << number << ' ' << sum << '\n';
}
main()
{
ciur();
int t;
in >> t;
while(t--)
solve();
}