Dev - C++ - Criba de Eratostenes

   
Vista:
Imágen de perfil de Omar

Criba de Eratostenes

Publicado por Omar (14 intervenciones) el 03/02/2016 08:06:13
Hola gente del foro, soy nuevo por aqui, necesito ayuda con un detalle de mi codigo, pues no he podido resolverlo aun, la cosa es que me he sacado de por ahi un algoritmo que obtiene los numeros primos antes de un numero N dado por el usuario, es conocida como la criba de eratostenes.
Para hacer esto, almacene todos los valores en un array, primero marque todos en true y despues con un indice 2, indentifique todos los multiplos. Ya se ha resuelto, pero ahora quiero que cada 10 elementos haga un salto de linea, implemente unas operaciones en donde imprime el arreglo pero sigo sin conseguirlo, agradeceria sus comentarios.
Gracias!


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
#include <iostream>
 
using namespace std;
 
int main()
{
   int N, i, j, cont, cont2, esp;
   cout <<"\n\n\t\tINGRESA EL ULTIMO NUMERO DE LA TABLA:" <<endl;
   cin >> N;
 
   bool primo[N];
   for (i = 0; i < N; i++) {
    primo[i] = true;                                            //Marca toda la table en True  (Todos son Primos al Principio)
   }
   for (i = 2; i < N; i++) {
                                                                 //Identifica los Multiplos : i*2, i*3, i*4, i*5
 
        for ( j = 2; i*j <N; j++) {
            primo[i*j] = false;
    }
}
    cout <<"\n\t\t";
    esp = 10;
    cont = -1;
    cont2 = 10;
    for (i = 0; i < N; i++){
        cont ++;
        if (primo[i]) cout <<"|"<< i;
        else cout <<"|*";
 
        if (primo[i]!=1);
          if (cont / esp*cont2 == 10 );
                cout <<endl <<"\t\t";
                cont2 = cont2+10;
   }
    cout << endl;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Criba de Eratostenes

Publicado por Thanatos (72 intervenciones) el 04/02/2016 02:10:23
Aún debes verificar la salida del algoritmo que selecciona los números primos. Por definición, un número primo es un número natural mayor que uno (...), pero tu algoritmo muestra el cero y el uno en su salida. También puedes verificarlo en la entrada de Wikipedia donde se explica en qué consiste la Criba de Eratóstenes.

Espero que este código te sirva como idea para solucionar tu duda:

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
#include <iostream>
#include <iomanip>
 
using namespace std;
 
int main() {
    unsigned N;
 
    cout << "\t\t\tINGRESA EL ULTIMO NUMERO DE LA TABLA: ";
    cin >> N;
    cout << endl;
 
    bool *primo = new bool[N];
    fill(primo, primo + N, true); // Todos son primos al principio
 
    for (unsigned i = 2; i < N; i++) {
        for (unsigned j = 2; i * j < N; j++) {
            primo[i * j] = false; // Identifica los Multiplos: i*2, i*3, i*4, i*5
        }
    }
 
    for (unsigned i = 0; i < N; i++) {
        if (primo[i]) {
            cout << right << setw(3) << setfill(' ') << '|';
            cout << right << setw(5) << setfill(' ') << i;
        } else {
            cout << right << setw(3) << setfill(' ') << '|';
            cout << right << setw(5) << setfill(' ') << '*';
        }
 
        if ((i + 1) % 10 == 0 || i == N - 1) {
            cout << right << setw(3) << setfill(' ') << '|';
            cout << endl;
        }
    }
   delete[] primo;
 
   return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar