Pagini recente » Cod sursa (job #2894009) | Cod sursa (job #1622549) | Cod sursa (job #2074381) | Cod sursa (job #2632208) | Cod sursa (job #2511409)
#include <vector>
#include <cstdio>
using namespace std;
const int MOD = 9973;
int t;
long long n;
bool ciur[1000005];
vector <int> prime;
void faCiur() {
for (int i = 2; i * i < 1000005; i++)
if (!ciur[i])
for (int j = i * i; j < 1000005; j += i)
ciur[j] = 1;
}
void getPrime() {
for (int i = 2; i < 1000005; i++)
if (ciur[i] == 0)
prime.push_back(i);
}
int main()
{
FILE *fi = fopen("ssnd.in", "r");
FILE *fo = fopen("ssnd.out", "w");
faCiur();
getPrime();
fscanf(fi, "%d", &t);
while (t--) {
fscanf(fi, "%lld", &n);
int cnt = 1;
long long suma = 1;
for (auto x: prime) {
long long e = 0, p = 1;
while (n % x == 0) {
e++;
p = p * x;
n /= x;
}
cnt = cnt * (e + 1);
suma = suma * (p * x - 1) / (x - 1) % MOD;
if (1LL * x * x > n)
break;
}
if (n > 1) { /// mai are un divizor prim (=n)
cnt = (cnt << 1);
suma = suma * (1LL * n * n - 1) / (n - 1) % MOD;
}
if (suma == 1 && n > 1) // prim
suma = n + 1, cnt = 2;
fprintf(fo, "%d %lld\n", cnt, suma);
}
return 0;
}