Pagini recente » Cod sursa (job #2058421) | Cod sursa (job #2575795) | Cod sursa (job #2573285) | Cod sursa (job #2370035) | Cod sursa (job #827039)
Cod sursa(job #827039)
#include <iostream>
#include <fstream>
#include <map>
using namespace std;
const int MOD = 9973;
const int MAX = 1 << 20;
bool P[MAX];
int primes[MAX];
int main() {
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
for (int i = 2; i * i <= MAX; i++) {
if (P[i] == 0) {
for (int j = i * i; j < MAX; j += i) {
P[j] = true;
}
}
}
for (int i = 2, j = 0; i < MAX; i++) {
if (P[i] == 0) {
primes[j++] = i;
}
}
long long T, N;
cin >> T;
while (T--) {
cin >> N;
map<long long, int> mp;
map<long long, long long> pow;
for (int i = 0; 1LL * primes[i] * primes[i] <= N; i++) {
if (N % primes[i] == 0) {
pow[primes[i]] = primes[i];
while (N % primes[i] == 0) {
mp[primes[i]]++;
N /= primes[i];
pow[primes[i]] *= primes[i];
}
}
}
if (N > 1) {
mp[N]++;
pow[N] = N * N;
}
long long cnt = 1, sum = 1;
for (map<long long, int>::iterator it = mp.begin(); it != mp.end(); it++) {
cnt *= it->second + 1;
}
for (map<long long, long long>::iterator it = pow.begin(); it != pow.end(); it++) {
sum = (sum * ((it->second - 1) / (it->first - 1))) % MOD;
}
cout << cnt << " " << sum << "\n";
}
return 0;
}