Pagini recente » Cod sursa (job #1423303) | Cod sursa (job #662341) | Cod sursa (job #1819460) | Cod sursa (job #290607) | Cod sursa (job #2263687)
#include <bits/stdc++.h>
#define MaxN 1000005
#define MOD 9973
#define ll long long
std::ifstream InFile("ssnd.in");
std::ofstream OutFile("ssnd.out");
int N, Q, K, NDiv, SDiv;
std::vector <int> Primes;
std::bitset <MaxN> Sieve;
void ComputeSieve() {
for (int i=2, j; i<MaxN; ++i)
if (Sieve[i] == 0) {
Primes.push_back(i);
for (j=2*i; j<MaxN; j+=i)
Sieve[j] = 1;
}
}
inline int Pow(int Baza, int Exp) {
int Rez = 1;
Baza %= MOD;
while(Exp) {
if (Exp&1)
Rez *= Baza,
Rez %= MOD;
Baza *= Baza;
Baza %= MOD;
Exp >>= 1;
} return Rez;
}
void Rezolvare() {
ComputeSieve();
int p, P1, P2;
while(Q--) {
NDiv = SDiv = 1;
InFile >> N;
for (int i=0; i<Primes.size() && 1LL * Primes[i] * Primes[i] <= N; ++i) {
if(N % Primes[i]) continue;
p = 0;
while(N % Primes[i] == 0) {
N /= Primes[i];
++p;
} NDiv *= (p+1);
P1 = (Pow(Primes[i], p+1) - 1)%MOD;
P2 = (Pow(Primes[i]-1, MOD-2))%MOD;
SDiv = (SDiv*P1) % MOD * P2 % MOD;
}
if(N > 1)
NDiv *= 2,
SDiv = (1LL*SDiv*(N+1)%MOD);
OutFile << NDiv << " " << SDiv << "\n";
}
}
void Citire() {
InFile >> Q;
}
int main() {
Citire();
Rezolvare();
return 0;
}