Pagini recente » Cod sursa (job #621848) | Cod sursa (job #1288390)
#include <cstdio>
#include <vector>
#include <bitset>
using namespace std;
const int PMAX = 1e6 + 2, MOD = 9973;
vector <int> primes, p;
vector <long long> de;
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 (long long N) {
vector <int> :: iterator k = primes.begin ();
vector <long long> :: iterator 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 (j = de.begin (), k = p.begin (); j != de.end (); ++j, ++k) {
int p1, p2;
p1 = (power (*j, *k + 1) - 1) % MOD;
p2 = power (*j - 1, MOD - 2) % MOD;
//suma = ((suma * (power (*j, *k + 1) - 1) % MOD) * (power (*j - 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;
long long n;
ciur ();
scanf ("%d", &t);
while (t--) {
scanf ("%lld", &n);
solve (n);
}
}