Pagini recente » Cod sursa (job #1798876) | Cod sursa (job #2265764) | Cod sursa (job #2352487) | Cod sursa (job #2023709) | Cod sursa (job #2103285)
#include <fstream>
#define MOD 9973
#define limit 1000005
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
long long int n, k = 0, DA[limit];
int t;
bool prim[limit];
void ciur()
{
long int i, j;
DA[k++] = 2;
for (i = 1; ((i * i) << 1) + (i << 1) <= limit; i++) {
if (prim[i] == 0) {
DA[k++] = 2 * i + 1;
for (j = ((i * i) << 1) + (i << 1); (j << 1) + 1 <= limit; j += (i << 1) + 1)
prim[j] = 1;
}
}
k--;
}
long long int power(long long int x, long long int p)
{
long long int rez = 1;
while (p) {
if (p & 1) rez = (rez*x) % MOD;
x = (x*x) % MOD;
p >>= 1;
}
return rez % MOD;
}
void solve()
{
f >> n;
long long int nr = 1, sum = 1, pw, i, pw1, pw2;
for (i = 0; i <= k && DA[i] * DA[i] <= n; i++) {
if (n % DA[i]) continue;
pw = 0;
while (n % DA[i] == 0) {
n /= DA[i];
pw++;
}
nr *= (pw + 1);
pw1 = (power(DA[i], pw + 1) - 1) % MOD;
pw2 = (power(DA[i] - 1, MOD-2)) % MOD;
sum = (((sum*pw1) % MOD) * pw2 ) % MOD;
}
if (n > 1) {
nr *= 2;
sum = (sum * (n + 1)) % MOD;
}
g << nr << ' ' << sum << '\n';
}
int main()
{
ciur();
f >> t;
while (t) {
solve();
t--;
}
f.close();
g.close();
return 0;
}