0votos

Números perfectos en C

por Izan BF hace 13 días

En 11 milisegundos busca todos en el rango [1, 10^18]. Estos son los que encuentra: 6 28 496 8128 33550336 8589869056 137438691328 Se puede ampliar la N hasa 2^64-1. Suerte ;D

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
26
#include <stdio.h> 
#include <string.h> 
 
#define N 1000000000000000000ULL 
 
short is_prime(unsigned long long n) 
    unsigned long long i; 
    if (n < 2) return 0; 
    if (n == 2) return 1; 
    for (i = 3; i*i <= n; i += 2) { 
        if (n % i == 0) return 0; 
    return 1; 
 
int main() 
    unsigned long long p, k; 
    for (p = 2; (k = ((1ULL << p) - 1) * (1ULL << (p-1))) <= N; ++p) { 
        if (is_prime(k)) { 
            // número perfecto ya que (2^p - 1) * 2^(p-1) es perfecto si (2^p - 1) es primo 
            printf("%llu\n", k); 
    }    
1 comentario
0votos

Escrito por Izan BF hace 13 días

Entre 0 y 10000 a penas tarda un milisegundo jaja

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.