Pagini recente » Cod sursa (job #2338533) | Cod sursa (job #573783) | Cod sursa (job #2671952) | Cod sursa (job #725439) | Cod sursa (job #2981849)
#include <bits/stdc++.h>
using namespace std;
const int MOD = 9973;
ifstream f ("ssnd.in");
ofstream g ("ssnd.out");
bitset<1000051> b;
int prime[80000], m;
void Ciur(int n) {
int i, j;
for (i = 3; i * i <= n; i += 2)
if (b[i] == 0)
for (j = i * i; j <= n; j += 2*i)
b[j] = 1;
m = 1;
prime[1] = 2;
for (i = 3; i <= n; i += 2)
if (b[i] == 0) prime[++m] = i;
}
int QuickExpo(int a, int n) {
int p = 1;
while (n > 0) {
if (n % 2 == 1)
p = (1LL * p * a) % MOD;
n /= 2;
a = 1LL * a * a % MOD;
}
return p;
}
void DESC(long long n) {
int sd = 1, nrd = 1, i, f, e, x;
for (i = 1; 1LL * prime[i] * prime[i] <= n; i++) {
f = prime[i];
e = 0;
while (n % f == 0) {
e++;
n /= f;
}
if (e > 0) {
nrd = nrd * (e + 1);
x = QuickExpo(f, e + 1) - 1;
if (x < 0)
x += MOD;
x = x * QuickExpo(f - 1, MOD-2) % MOD;
sd = sd * x % MOD;
}
}
if (n > 1) {
nrd = nrd * 2;
x = QuickExpo(n, 2) - 1;
if (x < 0) x += MOD;
x = x * QuickExpo(n - 1, MOD-2) % MOD;
sd = sd * x % MOD;
}
g << nrd << " " << sd << "\n";
}
int main()
{
Ciur(1000049);
int n;
long long x;
f >> n;
while (n--) {
f >> x;
DESC(x);
}
f.close();
g.close();
return 0;
}