Pagini recente » Monitorul de evaluare | Cod sursa (job #2247604) | Profil usureluflorian | Cod sursa (job #3193640) | Cod sursa (job #1287789)
#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;
for (; b; b >>= 1) {
if (b & 1)
c *= a;
a *= a;
}
return c;
}
void solve (int N) {
vector <int> :: iterator k = primes.begin (), j;
de.clear ();
p.clear ();
int s;
for (; *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) {
suma = suma * ((power (*k, *j + 1) - 1) / (*k - 1)) % 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);
}
}