Pagini recente » Cod sursa (job #1765501) | Cod sursa (job #2961069) | Cod sursa (job #3129883) | Cod sursa (job #2550914) | Cod sursa (job #3257146)
#include <bits/stdc++.h>
using namespace std;
const int MAX_SIEVE = 1e6;
const int MOD = 9973;
vector<int> primes;
vector<bool> is_prime(MAX_SIEVE + 1, true);
void sieve() {
is_prime[0] = is_prime[1] = false;
for (int i = 2; i <= MAX_SIEVE; ++i) {
if (is_prime[i]) {
primes.push_back(i);
for (long long j = 1LL * i * i; j <= MAX_SIEVE; j += i) {
is_prime[j] = false;
}
}
}
}
pair<long long, long long> computeDivisors(long long n) {
long long original_n = n;
long long count_divisors = 1;
long long sum_divisors = 1;
for (int p : primes) {
if (1LL * p * p > n) break;
if (n % p == 0) {
long long power = 0;
long long current_sum = 1;
long long current_term = 1;
while (n % p == 0) {
++power;
n /= p;
current_term *= p;
current_sum += current_term;
current_sum %= MOD;
}
count_divisors *= (power + 1);
sum_divisors *= current_sum;
sum_divisors %= MOD;
}
}
if (n > 1) {
count_divisors *= 2;
sum_divisors *= (1 + n);
sum_divisors %= MOD;
}
return {count_divisors, sum_divisors};
}
int main() {
sieve();
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int t;
fin >> t;
while (t--) {
long long n;
fin >> n;
pair<long long, long long> result = computeDivisors(n);
long long count = result.first;
long long sum = result.second;
fout << count << " " << sum << "\n";
}
return 0;
}