Pagini recente » Profil AlexandruBucur | Cod sursa (job #1946375) | Istoria paginii utilizator/eugen_flaviu | Monitorul de evaluare | Cod sursa (job #1726700)
#include <bits/stdc++.h>
void ssnd(int x, int primes[], int k, int &nr, int &sum) {
nr = 1;
sum = 1;
int po;
for (int i = 0; i < k; i++) {
po = 0;
while (x % primes[i] == 0) {
po++;
x = x / primes[i];
}
if (po != 0) {
nr *= (po + 1);
sum *= ((pow(primes[i], (po + 1)) - 1)) / (primes[i] - 1);
}
}
if (x > 1) {
nr *= 2;
sum *= (1 + x);
}
}
int main() {
FILE *fin = fopen("ssnd.in", "r");
FILE *fout = fopen("ssnd.out", "w");
int n, x, sum, nr;
fscanf(fin, "%d", &n);
int v[n];
int m = -1000000001;
for (int i = 0; i < n; i++) {
fscanf(fin, "%d", &x);
v[i] = x;
if (x > m) {
m = x;
}
}
int primes[(int)(sqrt(m))];
int k = 0;
bool prim[(int)(sqrt(m))];
memset(prim, true, sizeof(bool) * (int)(sqrt(m)));
for (int i = 2; i * i <= m; i++) {
if (prim[i]) {
primes[k] = i;
k++;
}
for (int j = i * i; j * j <= m; j += i) {
if (prim[j]) {
prim[j] = false;
}
}
}
for (int i = 0; i < n; i++) {
ssnd(v[i], primes, k, nr, sum);
fprintf(fout, "%d %d\n", nr, sum);
}
}