0votos

Números perfectos en C

por Izan BF hace 13 días

Un método muy fácil es este (el problema es que no puedes buscar en intervalos de más de 10^8 porque sueles necesitar demasiada memoria):

Encontrar números perfectos entre 0 y 10000. En lenguaje C.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h> 
#include <string.h> 
 
#define N 10000 
 
unsigned long long i, j, dsum[N+1]; 
 
int main() 
    memset(dsum, 0, (N+1) * sizeof(unsigned long long)); 
 
    for (i = 1; i <= N; ++i) { 
        for (j = 2*i; j <= N; j += i) { 
            dsum[j] += i; 
 
    printf("Números perfectos encontrados:\n"); 
    for (i = 1; i <= N; ++i) { 
        if (dsum[i] == i) { 
            // <i> es un número perfecto 
            printf("%llu\n", i); 
        }    
2 comentarios
0votos

Escrito por Izan BF hace 13 días

Básicamente, para cada número vamos desde ese a todos sus múltiplos y lo sumamos.
La idea es utilizar una criba como la de Eratóstenes.
0votos

Escrito por Izan BF hace 13 días

El siguiente método más eficiente es con números primos, pero eso es muy largo de escribir con C, con C++ es más fácil.

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.