Mai intai trebuie sa te autentifici.
Cod sursa(job #626555)
Utilizator | Data | 27 octombrie 2011 16:17:41 | |
---|---|---|---|
Problema | Suma si numarul divizorilor | Scor | 0 |
Compilator | c | Status | done |
Runda | Arhiva educationala | Marime | 0.7 kb |
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main () {
int n, i, nr, div = 2;
int *divs = calloc (1000001, sizeof(int));
int temp;
freopen ("ssnd.in", "r", stdin);
freopen ("ssnd.out", "w", stdout);
while (div < 1000001)
{
if (divs[div] == 0)
{
divs[div] = 1;
temp = div * div;
while (temp > 0 && temp < 1000001 && divs[temp] == 0)
{
divs[temp] = 2;
temp += div;
}
}
if (div == 2)
div ++;
else
div += 2;
}
scanf ("%d", &n);
long long int tmp, s;
while (n--)
{
scanf ("%lld", &tmp);
nr = 2;s = 1 + tmp;
for (i = 2; i < sqrt (tmp); i++)
if (divs[i] == 1 && tmp % i == 0)
{
s += i + tmp / i;
nr += 2;
}
printf ("%d %lld\n", nr, s);
}
free (divs);
return 0;
}