Pagini recente » Cod sursa (job #421712) | Cod sursa (job #1873440) | Cod sursa (job #991545) | Cod sursa (job #1298866) | Cod sursa (job #1726731)
#include <bits/stdc++.h>
#define NMAX 1000004
long long primes[NMAX];
int prim[NMAX];
long long v[NMAX];
void ssnd(long long x, long long primes[], int k, long long &nr, long long &sum) {
nr = 1;
sum = 1;
int po;
long long s, p;
for (int i = 0; i < k; i++) {
po = 0;
p = 1; s = 0;
while (x % primes[i] == 0) {
po++;
x = x / primes[i];
s += p;
p *= primes[i];
}
if (po != 0) {
nr *= (po + 1);
sum *= (s + p);
sum = sum % 9973;
}
}
if (x > 1) {
nr *= 2;
sum *= (1 + x);
sum = sum % 9973;
}
}
int main() {
FILE *fin = fopen("ssnd.in", "r");
FILE *fout = fopen("ssnd.out", "w");
long long n, x, sum, nr;
fscanf(fin, "%lld", &n);
long long m = -1000000001;
for (int i = 0; i < n; i++) {
fscanf(fin, "%lld", &x);
v[i] = x;
if (x > m) {
m = x;
}
}
int k = 0;
memset(prim, 1, sizeof(int) * NMAX);
for (long long i = 2; i * i <= m; i++) {
if (prim[i]) {
primes[k] = i;
k++;
for (long long j = i + i; j * j <= m; j += i) {
prim[j] = false;
}
}
}
for (int i = 0; i < n; i++) {
ssnd(v[i], primes, k, nr, sum);
fprintf(fout, "%lld %lld\n", nr, sum);
}
}