0votos

Crear lista primos en C#

por Roy Fernández Tovar hace 9 días

La forma tradicional esta comentada como forma 01. La optimizada esta como forma 02. Basicamente en la optimizada no se recorre todos los divisores, solo la primera mitad. Ademas no se usa un contador, basta con encontrar un divisor (exceptuando el 1 y el mismo numero) para saber que ese numero ya no es primo siendo innecesario recorrer el resto de los divisores.

Crea un programa eficiente que construya una lista de números primos.

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
 
namespace Algoritmos 
    class listanumprimo 
        public void listarprimo() 
        //FORMA 01 SIN OPTIMIZACION DEMORA 20 SEGUNDOS APROX EN TERMINAR EL CALCULO 
            //DateTime tiempo1 = DateTime.Now; 
            //int contador = 0; 
            //for (int i = 2; i <= 100000; i++) 
            //{ 
            //    for (int j = 1; j <= i; j++) 
            //    { 
            //        if (i % j == 0) 
            //            contador++; 
 
            //    } 
            //    if (contador == 2) 
            //        Console.WriteLine(i); 
            //    contador = 0; 
            //} 
            //DateTime tiempo2 = DateTime.Now; 
            //TimeSpan total = new TimeSpan(tiempo2.Ticks - tiempo1.Ticks); 
            //Console.WriteLine("tiempo: " + total.ToString());//20 segundos 
            //Console.ReadKey(); 
 
 
        //FORMA 02 CON OPTIMIZACION DEMORA 03 SEGUNDOS EN CALCULAR 
            DateTime tiempo1 = DateTime.Now; 
            Boolean t = true; 
            for (int i = 2; i <= 100000; i++) 
                for (int j = 2; j < ((i / 2) + 1); j++) 
                    if (i % j == 0) 
                        t = false; 
                        break; 
                    t = true; 
                if (t == true) 
                    Console.WriteLine(i); 
            DateTime tiempo2 = DateTime.Now; 
            TimeSpan total = new TimeSpan(tiempo2.Ticks - tiempo1.Ticks); 
            Console.WriteLine("tiempo: " + total.ToString());//2 segundos 
            Console.ReadKey(); 
 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.