Pagini recente » Cod sursa (job #1826053) | Cod sursa (job #1900853) | Cod sursa (job #2389261) | Cod sursa (job #1444456) | Cod sursa (job #1648068)
# include <fstream>
# include <bitset>
# include <vector>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int MAX = 1e6;
const int MOD = 9973;
vector<int> P;
bitset<MAX+66> viz;
int T;
int euclid(int a, int b, int &x, int &y) {
if (b == 0) {
x = 1, y = 0;
return a;
}
int xs, ys, d;
d = euclid(b, a%b, xs, ys);
x = ys;
y = xs - (a/b) * ys;
return d;
}
int inversModular(int A, int N) {
int X, Y;
if (euclid(A, N, X, Y))
;
while (X <= 0)
X += N;
return X;
}
long long pow(int a, int n) {
if (n == 0) return 1;
if (n == 1) return a;
if (n % 2 == 1) return (a * pow(a, n-1)) % MOD;
a = pow(a, n>>1);
return (a*a)%MOD;
}
void ciur() {
P.push_back(2);
for (int i=3; i<=MAX; i+=2)
if (!viz[i]) {
P.push_back(i);
for (int j=i+i; j<=MAX; j+=i)
viz[j] = 1;
}
}
void ssnd(long long N) {
int sdiv, nrdiv, i, e, up, down;
sdiv = nrdiv = 1;
for (i=0; P[i]*P[i] <= N && i < (signed)P.size(); ++i) {
e = 0;
while (N % P[i] == 0) {
++e;
N /= P[i];
}
if (e > 0) {
nrdiv *= (e + 1);
up = pow(P[i], e + 1) - 1;
down = inversModular(P[i] - 1, MOD);
sdiv = (((1LL * sdiv * up) % MOD) * down) % MOD;
}
}
if (N > 1) {
e = 1;
nrdiv *= (e + 1);
up = pow(N, e + 1) - 1;
down = inversModular(N - 1, MOD);
sdiv = (((1LL * sdiv * up) % MOD) * down) % MOD;
}
fout << nrdiv << " " << sdiv << "\n";
}
long long X;
int main() {
ciur();
fin >> T;
while (T--) {
fin >> X;
ssnd(X);
}
return 0;
}