Pagini recente » Cod sursa (job #194595) | Cod sursa (job #2368182) | Cod sursa (job #2382173) | Cod sursa (job #244742) | Cod sursa (job #2443495)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
const int NMAX=1000005,MOD=9973;
char ciur[NMAX];
int p[NMAX];
long long n,k;
int sieve(){
for (int i = 4; i <= NMAX; i += 2)
ciur[i] = 1;
p[++k] = 2;
for (int i = 3; i <= NMAX; i += 2) {
if (!ciur[i]) {
p[++k] = i;
for (int j = i + i; j <= NMAX; j += i)
ciur[j] = 1;
}
}
}
inline int log_pow(int n,int p){
int r=1;
n%=MOD;
while(p){
if(p%2==1)
r=(1LL*r*n)%MOD;
n=(1LL*n*n)%MOD;
p=p/2;
}
return r;
}
void invers_modular(int a, int b, int &x, int &y)
{
if (!b)
x = 1, y = 0;
else
{
invers_modular(b, a%b, x, y);
int aux = x;
x = y;
y = aux - y * (a / b);
}
}
void solve(long long number) {
int nr_d = 1, sum_d = 1;
for (int i = 1; i <= k && p[i] * p[i] <= number; i++) {
if (number % p[i] == 0) {
int pi = 0;
while (number % p[i] == 0) {
number /= p[i];
pi++;
}
nr_d *= (pi + 1);
int numarator, invers_numitor, xx;
numarator = (log_pow(p[i], pi + 1) - 1) % MOD;
invers_modular(p[i] - 1, MOD, invers_numitor, xx);
if (invers_numitor < 0) invers_numitor = MOD + invers_numitor % MOD;
sum_d = (((sum_d * numarator) % MOD) * invers_numitor) % MOD;
}
}
if (number > 1) {
nr_d *= 2;
sum_d = (1ll * sum_d * (number + 1) % MOD);
}
out << nr_d << " " << sum_d << "\n";
}
int main()
{
sieve();
int t;
in >> t;
while (t--) {
in >> n;
solve(n);
}
return 0;
}