Pagini recente » Cod sursa (job #2944771) | Cod sursa (job #956136) | Cod sursa (job #1068396) | Cod sursa (job #583066) | Cod sursa (job #1198808)
#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
using namespace std;
const int mod = 9973;
vector<int> gen_primes(int n)
{
vector<bool> sieve(n+1, true);
vector<int> primes;
for (int p = 2; p <= n; p++) {
if (!(sieve[p])) {
continue;
}
primes.push_back(p);
for (int i = 2*p; i <= n; i += p) {
sieve[i] = false;
}
}
return primes;
}
pair<int, int> num_sum_divisors(long long n, const vector<int> & primes)
{
int num = 1;
int sum = 1;
int sqrtn = sqrt(n);
for (auto p: primes) {
if (p > sqrtn) {
break;
}
if (n%p != 0) {
continue;
}
int subnum = 1;
int subsum = 1;
do {
subnum++;
subsum *= p%mod;
subsum++;
subsum %= mod;
n /= p;
} while (n%p == 0);
num *= subnum;
num %= mod;
sum *= subsum;
sum %= mod;
sqrtn = sqrt(n);
}
if (n != 1) {
num *= 2;
num %= mod;
sum *= (1+n)%mod;
sum %= mod;
}
return {num, sum};
}
int main()
{
ios::sync_with_stdio(false);
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
vector<int> primes = gen_primes(1e6);
int ntest;
cin >> ntest;
for (int test = 0; test < ntest; test++) {
long long n;
cin >> n;
auto res = num_sum_divisors(n, primes);
printf("%d %d\n", res.first, res.second);
}
return 0;
}