Pagini recente » Clasament aparare | Cod sursa (job #2054202) | Cod sursa (job #1566209) | Cod sursa (job #1442196) | Cod sursa (job #2352585)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
const int bound = 1e6;
const int mod = 9973;
vector <int> divs;
bitset <bound + 3> vis;
void ciur()
{
divs.push_back(2);
for(int i = 3; i < bound; i += 2)
if(vis[i] == 0)
{
divs.push_back(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;
long long m = n;
for(auto i : divs)
{
if(i * i > m)
break;
if(n % i != 0)
continue;
int nr = 0;
while(n % i == 0)
{
n /= i;
nr++;
}
number *= (nr + 1);
int up = (lgpow(i, nr + 1) - 1);
if(up < 0)
up += mod;
int inv = (lgpow(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();
}