Pagini recente » Cod sursa (job #1913410) | Cod sursa (job #1978486) | Cod sursa (job #1324813) | Cod sursa (job #1429657) | Cod sursa (job #3220111)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
const int NMAX = 1e6, MOD = 9973;
vector <int> primes;
int query;
bool eratosthenes[NMAX + 1];
void read() {
cin >> query;
}
void sieve() {
for (int index = 4; index <= NMAX; index += 2) {
eratosthenes[index] = 1;
}
for (int index1 = 3; index1 * index1 <= NMAX; index1 += 2) {
for (int index2 = index1 * index1; index2 <= NMAX; index2 += 2 * index1) {
eratosthenes[index2] = 1;
}
}
primes.push_back(2);
for (int index = 3; index < NMAX; index += 2) {
if (eratosthenes[index] == 0) {
primes.push_back(index);
}
}
primes.push_back(1e6 + 1);
}
void solve() {
long long n;
cin >> n;
int numberOfDivisors = 1, productOfDivisors = 1;
for (int index1 = 0; (long long)primes[index1] * primes[index1] <= n; ++index1) {
if (n % primes[index1] != 0) {
continue;
}
int power = 0;
while (n % primes[index1] == 0) {
n /= primes[index1];
++power;
}
numberOfDivisors *= (power + 1);
long long sum = 1, currentPower = primes[index1];
for (int index2 = 1; index2 <= power; ++index2) {
sum += currentPower;
currentPower *= primes[index1];
}
productOfDivisors = ((long long)productOfDivisors * sum) % MOD;
}
if (n != 1) {
numberOfDivisors *= 2;
productOfDivisors = ((long long)productOfDivisors * (n + 1)) % MOD;
}
cout << numberOfDivisors << ' ' << productOfDivisors << '\n';
}
int main() {
read();
sieve();
while (query--) {
solve();
}
return 0;
}