Pagini recente » Cod sursa (job #557072) | Cod sursa (job #182543) | Cod sursa (job #2270089) | Cod sursa (job #3144966) | Cod sursa (job #1528366)
# include <bits/stdc++.h>
# define MOD 9973
using namespace std;
bool ok[1000000 + 5];
long long prim[500000 + 5], N, n, x;
long long EXP, nrdiv, sum;
void ciur() {
int i, j;
for (i = 2; i <= 1000000; ++i) ok[i] = true;
for (i = 2; i <= 1000000; ++i)
if (ok[i] == true)
for (j = 2 * i; j <= 1000000; j += i)
ok[j] = false;
for (i = 1; i <= 1000000; ++i)
if (ok[i] == true) prim[++N] = i;
}
long long res(long long N){
long long nr = N, cEXP = EXP;
while (cEXP > 1) {
nr = 1LL * nr * N;
cEXP--;
}
return ( (nr - 1) / (N - 1) );
}
void T(long long x) {
int cN = 0;
sum = 1;
long long nr = x;
while (x != 1 && cN <= N && prim[cN] <= sqrt(nr * 1.0)) {
EXP = 0;
cN++;
while (x % prim[cN] == 0){
x /= prim[cN];
EXP++;
}
nrdiv = nrdiv*(EXP + 1);
EXP++;
sum *= 1LL* res(prim[cN]);
sum %= MOD;
}
}
int main ()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%lld\n", &n);
ciur();
for (int i = 1; i <= n; i++) {
scanf("%lld\n", &x);
sum = 1;
nrdiv = 1;
if (x <= 1000005 && ok[x] == true)
{
printf("2 %lld\n", (x + 1) % MOD);
continue;
}
T(x);
printf("%lld %lld\n", nrdiv, sum);
}
return 0;
}