Pagini recente » Cod sursa (job #2899945) | Cod sursa (job #1937346) | Cod sursa (job #2710380) | Cod sursa (job #2460725) | Cod sursa (job #2069992)
#include <bitset>
#include <fstream>
#include <vector>
#define PMAX 1000005
#define MOD 9973
std::ifstream cin("ssnd.in");
std::ofstream cout("ssnd.out");
std::bitset<PMAX> isPrime;
std::vector<int> primes;
void findPrimes() {
/* Mark all numbers as prime. */
isPrime.set();
int noPrimes = 1; // count 2 as well
for (int i = 3; i < PMAX; i += 2) {
if (isPrime[i]) {
noPrimes++;
for (int j = 2 * i; j < PMAX; j += i) {
isPrime[j] = false;
}
}
}
primes.reserve(noPrimes);
primes.emplace_back(2);
for (int i = 3; i < PMAX; i += 2) {
if (isPrime[i]) {
primes.emplace_back(i);
}
}
}
std::pair<int, int> getPower(int& n, int p) {
std::pair<int, int> result;
result.second = 1;
while (n % p == 0) {
n /= p;
result.first++;
result.second *= p;
}
return result;
}
void solve(int n) {
int currentSum = 1;
int noDivisors = 1;
std::pair<int, int> power;
size_t idx = 0;
while (n > 1) {
auto p = primes[idx];
if (n % p == 0) {
power = getPower(n, p);
noDivisors *= (1 + power.first);
currentSum = currentSum * ((power.second * p - 1) / (p - 1)) % MOD;
}
idx++;
}
cout << noDivisors << " " << currentSum << "\n";
}
int main() {
int n, tests;
findPrimes();
cin >> tests;
while (tests--) {
cin >> n;
solve(n);
}
return 0;
}