Pagini recente » Cod sursa (job #942017) | Cod sursa (job #1114271) | Atasamentele paginii Profil cygnushg | Cod sursa (job #1789971) | Cod sursa (job #1607623)
#include <stdio.h>
#define IN "ssnd.in"
#define OUT "ssnd.out"
#define MAXN 1000001
#define MOD 9973
int k = 0, prime [MAXN];
void eratosthenes (void) {
int i, j;
char seen[MAXN];
for (i = 2; i <= MAXN; ++ i)
if (seen [i] != 1){
seen [i] = 1;
prime [++ k] = i;
for (j = i + i; j <= MAXN; j += i)
seen [j] = 1;
}
}
int power (int a, int b){
if (b == 0)
return 1;
if (b % 2)
return a * power (a * a, b / 2);
else
return power (a * a, b / 2);
}
inline void solve (int nr){
int i, c, counter = 1, sum = 1, auxNr = nr, p;
for (i = 1; i <= k && prime[i] * prime[i] <= auxNr; ++ i){
if (nr % prime[i] == 0){
c = 0;
while (nr % prime[i] == 0){
++ c;
nr /= prime[i];
}
counter = (counter * ((c + 1) % MOD)) % MOD;
p = (power (prime[i], c + 1) - 1) / ( prime[i] - 1);
sum = (sum * p % MOD) % MOD;
}
}
if (nr > 1)
++ counter,
sum = (sum * ((nr * nr - 1) / (nr - 1)) % MOD) % MOD;
printf ("%d %d", counter, sum);
printf ("\n");
}
int main(void) {
freopen (IN, "r", stdin);
freopen (OUT, "w", stdout);
eratosthenes();
int t, nr;
scanf ("%d", &t);
while (t--){
scanf ("%d", &nr);
solve (nr);
}
fclose (stdin);
fclose (stdout);
return 0;
}