Pagini recente » Cod sursa (job #3239332) | Cod sursa (job #2596467) | Cod sursa (job #2685427) | Cod sursa (job #130698) | Cod sursa (job #1528368)
# include <bits/stdc++.h>
# define MOD 9973
#define ULL unsigned long long
using namespace std;
bool ok[1000000 + 5];
int prim[500000 + 5];
ULL N, n, x;
ULL 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;
}
ULL res(ULL N){
ULL nr = N, cEXP = EXP;
while (cEXP > 1) {
nr = 1LL * nr * N;
cEXP--;
}
return ( (nr - 1) / (N - 1) );
}
void T(ULL x) {
int cN = 0;
sum = 1;
ULL nr = x;
while (x != 1 && cN <= N) {
EXP = 0;
cN++;
while (x % prim[cN] == 0){
x /= prim[cN];
EXP++;
}
nrdiv = nrdiv*(EXP + 1);
EXP++;
sum *= 1LL* res(prim[cN]);
sum %= MOD;
}
if (cN > N) sum *= 1LL*x, nrdiv++;
}
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;
}