Pagini recente » Cod sursa (job #271927) | Cod sursa (job #1634035) | Cod sursa (job #1485945) | Cod sursa (job #926355) | Cod sursa (job #1288378)
#include <cstdio>
#include <vector>
#include <bitset>
using namespace std;
const int PMAX = 1e6 + 2, MOD = 9973;
vector <int> primes, de, p;
bitset <PMAX> check;
void ciur () {
int k;
primes.push_back (2);
for (int i = 3; i <= PMAX; i += 2) {
if (!check[i]) {
primes.push_back (i);
for (k = 3 * i; k <= PMAX; k += 2 * i)
check[k] = 1;
}
}
}
long long power (long long a, int b) {
long long c = 1;
a %= MOD;
for (; b; b >>= 1) {
if (b & 1)
c = c * a % MOD;
a = a * a % MOD;
}
return c;
}
void solve (int N) {
vector <int> :: iterator k = primes.begin (), j;
de.clear ();
p.clear ();
int s;
for (; 1LL**k**k <= N && k != primes.end (); ++k) {
if (N % *k == 0) {
de.push_back (*k);
s = 0;
while (N % *k == 0) {
N /= *k;
++s;
}
p.push_back (s);
}
}
if (N != 1) {
de.push_back (N);
p.push_back (1);
}
long long modul = 1, suma = 1;
for (k = p.begin (); k != p.end (); ++k)
modul *= 1LL * (*k + 1);
for (k = de.begin (), j = p.begin (); k != de.end (); ++k, ++j) {
int p1, p2;
p1 = (power (*k, *j + 1) - 1) % MOD;
p2 = power (*k - 1, MOD - 2) % MOD;
//suma = ((suma * (power (*k, *j + 1) - 1) % MOD) * (power (*k - 1, MOD - 2) % MOD)) % MOD;
suma = (suma * p1 % MOD) * p2 % MOD;
}
printf ("%lld %lld\n", modul, suma);
}
int main () {
freopen ("ssnd.in", "r", stdin);
freopen ("ssnd.out", "w", stdout);
int t, n;
ciur ();
scanf ("%d", &t);
while (t--) {
scanf ("%d", &n);
solve (n);
}
}