Pagini recente » Monitorul de evaluare | Cod sursa (job #686853) | Cod sursa (job #387258) | Cod sursa (job #3327508) | Cod sursa (job #3346485)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");
const int N_MAX = 1e6, MOD = 9973;
int t, prime[N_MAX / 3], m;
long long n;
bitset <N_MAX + 5> ciur;
void Ciur () {
ciur[0] = ciur[1] = 1;
for (int i = 2; i <= N_MAX; i++) {
if (!ciur[i]) {
prime[++m] = i;
for (int j = i * 2; j <= N_MAX; j += i)
ciur[j] = 1;
}
}
}
int putere (long long a, int b) {
int p = 1;
while (b != 0) {
int cif = b % 2;
if (cif)
p = 1LL * p * a % MOD;
a = 1LL * a * a % MOD;
b /= 2;
}
return p;
}
void solve (long long n) {
int d = 1, nr_divizori = 1, suma_divizori = 1;
while (prime[d] * prime[d] <= n && d <= m) {
int e = 0;
while (n % prime[d] == 0) {
n /= prime[d];
e++;
}
nr_divizori = 1LL * nr_divizori * (e + 1) % MOD;
if (e != 0)
suma_divizori = 1LL * suma_divizori * putere (prime[d] - 1, MOD - 2) % MOD * (putere(prime[d], e + 1) - 1 + MOD) % MOD;
d++;
}
if (n != 1) {
nr_divizori = 1LL * nr_divizori * 2 % MOD;
suma_divizori = 1LL * suma_divizori * putere (n - 1, MOD - 2) % MOD * (putere(n, 2) - 1 + MOD) % MOD;
}
fout << nr_divizori << " " << suma_divizori << "\n";
}
int main() {
Ciur();
fin >> t;
while (t--) {
fin >> n;
solve (n);
}
return 0;
}