Pagini recente » Cod sursa (job #464430) | Cod sursa (job #2042809) | Cod sursa (job #7631) | Cod sursa (job #1401883) | Cod sursa (job #1336760)
#include <fstream>
#include <vector>
#define MOD 9973
int powexp(int base, int expo)
{
int rez = 1, p = base % MOD;
while (expo) {
if (expo & 1)
rez = (rez * p) % MOD;
p = (p * p) % MOD;
expo >>= 1;
}
return rez;
}
int main()
{
long long n, t;
std::vector<bool> isprime(1 + 1000000, true);
std::vector<int> primes;
primes.reserve(328497);
isprime[0] = isprime[1] = false;
primes.push_back(2);
for (int i = 3; i <= 1000000; i += 2) {
if (isprime[i]) {
primes.push_back(i);
if (i < 1000)
for (int j = i * i; j <= 1000000; j += i * 2)
isprime[j] = false;
}
}
std::ifstream f("ssnd.in");
std::ofstream g("ssnd.out");
f >> t;
while (t--)
{
f >> n;
int rez1 = 1, rez2 = 1;
auto i = primes.begin();
auto end = primes.end();
while (i != end) {
auto p = (*i);
if (p * p > n)
break;
i++;
auto d = 1;
while (n % p == 0) {
d++;
n /= p;
}
rez1 = (rez1 * d) % MOD;
rez2 = (rez2 * (powexp(p, d) - 1)) % MOD;
rez2 = (rez2 * powexp(p - 1, MOD - 2)) % MOD;
}
if (n > 1) {
rez1 = (rez1 << 1) % MOD;
rez2 = (rez2 * (n + 1)) % MOD;
}
g << rez1 << " " << rez2 << "\n";
}
f.close();
g.close();
}