Pagini recente » Cod sursa (job #496629) | Cod sursa (job #1179544) | Cod sursa (job #810945) | Cod sursa (job #659214) | Cod sursa (job #1566896)
#include<cstdio>
#include<bitset>
using namespace std;
const int MODULO = 9973;
const int NMAX = 1000000;
bitset <NMAX+7> viz;
int P[NMAX];
int t, nrprime;
long long n;
void file_init() {
if (freopen("ssnd.in", "r", stdin)) ;
if (freopen("ssnd.out", "w", stdout)) ;
}
void file_close() {
fclose(stdin);
fclose(stdout);
}
void ciur() {
for (int i=2; i<=NMAX; ++i) {
if (!viz[i]) {
P[++nrprime] = i;
for (int j=2; i*j<=NMAX; ++j) {
viz[i*j] = true;
}
}
}
}
long long exp(long long a, int n) {
if (n == 0) return 1;
if (n == 1) return a;
if (n % 2 == 1) return (a * exp(a, n-1)) % MODULO;
else {
a = exp(a, n/2);
return (a * a)% MODULO;
}
}
void rezolva(long long n) {
int sdiv = 1;
int nrdiv = 1;
for (int i=1; P[i]*P[i]<=n && i <= nrprime; ++i) {
int e = 0;
while(n % P[i] == 0) {
++e;
n = n / P[i];
}
if (e > 0) {
nrdiv *= (e + 1);
int x = (exp(P[i], e + 1) - 1) % MODULO,
y = (exp(P[i] - 1, MODULO - 2)) % MODULO;
// Il scriem pe Pi-1 ca fiind inversul sau pentru a aplica modulul
sdiv = (((1LL * sdiv * x) % MODULO) * y) % MODULO;
}
}
if (n > 1) {
nrdiv *= 2;
sdiv = (1LL * sdiv * (n + 1)) % MODULO;
}
printf ("%d %d\n", nrdiv, sdiv);
}
int main() {
file_init();
ciur();
if (scanf("%d", &t));
for (int i=1; i<=t; ++i) {
if (scanf("%lld", &n));
rezolva(n);
}
file_close();
return 0;
}