Pagini recente » Cod sursa (job #874586) | Cod sursa (job #1860361) | Cod sursa (job #2583332) | Monitorul de evaluare | Cod sursa (job #459415)
Cod sursa(job #459415)
#include <cstdio>
#define ll long long
#define FIN "ssnd.in"
#define FOU "ssnd.out"
#define PW(i) ( 1 << (i) )
#define SQ(i) ( (ll) (i) * (i) )
#define MOD 9973
#define MAX 1000005
ll N;
int T, P[MAX], n = 0;
unsigned char V[1 << 17];
void prec ()
{
P[++n] = 2;
for (int i = 3; i < MAX; i += 2)
{
if (V[i >> 4] & (1 << ((i >> 1) & 7))) continue; // = daca (V[i] == 1)
P[++n] = i; // introducem pe i ca numar prim
for (int j = i + (i << 1); j < MAX; j += i << 1)
V[j >> 4] |= 1 << ((j >> 1) & 7); // V[j] = 1;
}
}
inline int pwlg (int n, int p)
{
int a = n, sol = 1;
for (int i = 0; PW(i) <= p; ++i)
{
if ( (PW(i) & p) > 0)
sol = (sol * a) % MOD;
a = SQ(a) % MOD;
}
return sol;
}
void ssnd ()
{
scanf("%lld", &N);
int NR = 1, SUM = 1;
ll AUX = N;
for (int i = 1; SQ ( P[i] ) <= N; ++i)
if (N % P[i] == 0)
{
int p, s;
for (p = 0, s = 1; AUX % P[i] == 0; AUX /= P[i], s *= P[i], ++p ) ;
NR *= p + 1;
SUM *= ((ll) s * P[i] - 1) % MOD, SUM %= MOD;
SUM *= pwlg (P[i] - 1, MOD - 2), SUM %= MOD;
}
if (AUX > 1)
{
NR <<= 1;
SUM *= (SQ(AUX) - 1) % MOD, SUM %= MOD;
SUM *= pwlg (AUX - 1, MOD - 2), SUM %= MOD;
}
printf("%d %d\n", NR, SUM);
}
int main ()
{
freopen(FIN, "r", stdin);
freopen(FOU, "w", stdout);
for (scanf("%d", &T); T ; --T)
ssnd () ;
}