Pagini recente » Cod sursa (job #2056168) | Cod sursa (job #2445159) | Cod sursa (job #1994975) | Cod sursa (job #574607) | Cod sursa (job #2000332)
#include <cstdio>
using namespace std;
const int MOD = 9973;
const int NMAX = 1000000;
bool vf[NMAX + 5];
int nrp[NMAX + 5];
int k;
long long int n;
void ciur() {
for(int i = 2; i < NMAX; ++i) {
if(vf[i] == 0) {
nrp[++k] = i;
for(int j = i + i; j < NMAX; j += i) {
vf[j] = 1;
}
}
}
}
int putere(int x, int p)
{
int sol = 1;
x %= MOD;
for(;p; p /= 2) {
if(p % 2) {
sol *= x;
sol %= MOD;
}
x *= x;
x %= MOD;
}
return sol;
}
void rezolvare()
{
int sol1 = 1, sol2 = 1;
for(int i = 1;i <= k && nrp[i] * nrp[i] <= n; ++i) {
if(n % nrp[i] == 0) {
int p = 0;
while(n % nrp[i] == 0) {
n /= nrp[i];
++p;
}
sol1 *= (p + 1);
int p1 = (putere(nrp[i], p + 1) - 1) % MOD;
int p2 = putere(nrp[i] -1, MOD - 2) % MOD;
sol2 = (((sol2 * p1) % MOD) * p2) % MOD;
}
}
if(n > 1) {
sol1 *= 2;
sol2 = (1LL * sol2 * (n + 1) % MOD);
}
printf("%d %d\n", sol1, sol2);
}
int main()
{
int T;
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d", &T);
ciur();
for(int q = 0;q < T; ++q) {
scanf("%lld", &n);
rezolvare();
}
return 0;
}