Pagini recente » Cod sursa (job #1598900) | Cod sursa (job #2451541) | Cod sursa (job #2167371) | Cod sursa (job #1795271) | Cod sursa (job #1726453)
#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);
}
}
}
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;
}
}
bool prim[m + 1];
memset(prim, true, sizeof(bool) * (m + 1));
for (int i = 2; i <= sqrt(m); i++) {
for (int j = i * i; j <= m; j += i) {
if (prim[j]) {
prim[j] = false;
}
}
}
int primes[m + 1];
int k = 0;
for (int i = 2; i <= m; i++) {
if (prim[i]) {
primes[k] = i;
k++;
}
}
for (int i = 0; i < n; i++) {
ssnd(v[i], primes, k, nr, sum);
fprintf(fout, "%d %d\n", nr, sum);
}
}