C++ encontrar todos los números primos a partir del 1 de un número ingresado

Así que el punto es el programa para buscar y mostrar todos los números primos entre 1 y el número que se introduce. Estoy usando number_test como el número de la prueba para el primer, y el divisor y el número a dividir por.

No estoy seguro de lo que está mal, como a mí me parece funcionalmente el mismo que el programa publicado aquí: La impresión de los números primos del 1 al 100
con algunos cambios de menor importancia (introducir un número, el cambio de «i» a menos que el número introducido).

He estado buscando durante los últimos tres o cuatro días, y no he encontrado nada que realmente responde a esta pregunta totalmente, en la medida que necesito para la clase. Cualquier ayuda es muy apreciada.

#include iostream
#include conio.h
using namespace std;

void main(void){
//Declare variables
int number_entered;
//Get inputs    
cout << "This program lists all prime numbers from 1 through a positive number entered."
 << endl;
cout << "Please enter a positive integer."
 << endl;
cin >> number_entered;
cout << "Displaying all numbers from 1 to " << number_entered
 << endl
 << "Press any key to continue..."
 << endl;
getch();

for(int number_test = 2; number_test < number_entered; number_test++){
    for(int divisor = 2; divisor < number_test; divisor++){
        if(number_test % divisor == 0){
            break;
        }
        else if(number_test % divisor != 0){
            cout << number_test << " ";
            break;
        }
    }
}

getch();
}
  • void main no es legal en C++. Yo también presumir que su código real ha corchetes alrededor del encabezado de nombres de archivo.
  • usted debe buscar para el primer número de la generación de stackoverflow.com
InformationsquelleAutor user2895469 | 2013-10-18

9 Kommentare

  1. 9

    Debe utilizar la Criba de Eratóstenes para calcular los números primos menos de n. Comience haciendo una lista de todos los números del 2 al máximo deseado primer n. Luego, en cada paso iterativo, el menor número restante que aún no ha sido considerado es la salida y todos sus múltiplos son tachados de la lista.

    function primes(n)
        sieve := makeArray(2..n, True)
        for p from 2 to n step 1
            if sieve(p)
                output p
                for i from p*p to n step p
                    sieve[i] := False

    Este O(n log log n) del algoritmo es muy rápida; usted debe ser capaz de calcular la 78498 los primos de menos de un millón en menos de un segundo.

    • Supongo que es una manera de hacer evidente que él engañó a su tarea…
  2. 2

    Un simple Programa de C++ para encontrar a los «N» números primos.

        #include  <iostream >
        using  namespace  std;
    
        int  main()
        {
            int  N;
            cin  >>  N;
            for (int  i =  2;  N > 0;  ++i)
            {
                bool  isPrime  =  true ;
                for (int  j =  2;  j < i;  ++j)
                {
                    if (i  % j ==  0)
                    {
                        isPrime  =  false ;
                        break ;
                    }
                }
                if (isPrime)
                {
                    --N;
                    cout  <<  i  <<  "\n";
                }
            }
            return  0;
        }
  3. 2

    Sólo una pequeña sugerencia. Puesto que los números primos son impares, incluso los números pueden ser dejados de lado.
    Por ejemplo, en la siguiente bucles, i y j incremento de un 2 (i +=2) en lugar de 1 (i ++).

    for (int i=3;i<=numberByUser; i+=2){
        for (j=3;j<=i;j +=2){
            if (i%j==0){
                break;
            }
        }
  4. 1

    creo que en tu respuesta alguna manera una vez que el bucle se termina(estoy hablando sobre el bucle de comprobación de la si es primo o no)una vez que se sale usted no sabe si hizo el salto o no.Así que trate de hacer una bandera de la variable y comprobar fuera.Yo ope que trabajará

    for(n=lower+1; n<upper; n++)
     {
        prime = 1;
         for(i=2; i<n; i++)
           if(n%i == 0)
             {
              prime = 0;
               break;
              }
           if(prime)
            printf("\n\n\t\t\t%d", n);
     }
  5. 0
    for(int number_test = 2; number_test < number_entered; number_test++){
        for(int divisor = 2; divisor < number_test; divisor++){
            if(number_test % divisor == 0){
                break;
            }
            else if(number_test % divisor != 0){
                cout << number_test << " ";
                break;
            }
        }
    }

    El código anterior no se muestran los números primos, sólo se mostrará el número introducido si/cuando se ejecuta en un divisor de que no es un factor de la cantidad. Por ejemplo, si escribe «9», que se iniciará a las 2, que no es un factor de 9, por lo que mostrará el número «9» (incorrectamente) como un «primer», cuando no lo es.

    El método más sencillo para comprobar si un número es una de las principales es la comprobación de todos los números primos por debajo de la raíz cuadrada para ver si son los factores del número dado. Si ninguno de ellos (entonces ninguno de los no-números primos por debajo de determinado número será), el número es un número primo. Si tiene al menos un factor primo menor o igual a la raíz cuadrada de, no es la prime.

    Ya que usted está buscando para mostrar todos los números primos en un rango de [0, X], usted puede simplemente revise su lista de factores a medida que avanza (o hacerlo a la inversa, que es efectivamente lo que la Criba de Eratóstenes hace).

  6. 0

    Cuando mi punto era como tu, me escribió este código, funcionó. Espero que te ayude.

    #include <cstdio>
    #include <vector>
    using namespace std;
    
    vector <int> sn;
    
    bool isPrime(int n) {
            if (n <= 1) {
                    return 0;
            }
            if (n == 2) {
                    return true;
            }
            if (!(n % 2)) {
                    return false;
            }
            for (int i = 2; i*i <= n; i++) {
                    if (!(n % i)) {
                            return 0;
                    }
            }
            return 1;
    }
    
    void primeNumbers(int k) {
            sn.push_back (2);
            int i = 3, j = 1;
            for ( ; j < k + 1; i += 2 && j++) {
                    if (isPrime(i)) {
                            sn.push_back(i);
                    }
            }
    }
    
    int main() {
            int i, k;
            scanf("%d", &k);
            primeNumbers(k);
            for (i = 0; i < sn.size(); i++) {
                    printf("%d ", sn[i]);
            }
            return 0;
    }
  7. 0
    int getNumberOfPrimes(int N) {
        bool *numbers = new bool[N-1]();
    
        for (int i = 2; i <= N/2; ++i) {
            if (numbers[i-2] == true) continue;
    
            for (int j = i+i; j <= N; j = j+i) {
                numbers[j-2] = true;
            }       
        }
    
        int count = 0;
        for (int i = 0; i < (N-1); ++i) {
            if (numbers[i] == false) ++count;
        }
    
        delete []numbers;
        return(count);
    }
  8. 0

    Hombre supongo que tengo el más simple de methode de todo esto. Espero que funcione para usted!

    #include < iostream >
    
    using namespace std;
    
    int main()
    {
      int n, i, j
      cin>>n;  //The max limith
      for(i=2; i<=2; i++)
       {
         for(j=1; j<=i/2; j++)
          if(i%j!=o)
          cout<<i;
       }
    
     return 0;
    }
  9. 0

    Si un número tiene divisores, al menos uno de ellos debe ser menor o igual a la raíz cuadrada del número. Cuando la comprobación de divisores, que sólo necesita comprobar hasta la raíz cuadrada, no todo el camino hasta el número que está siendo probado.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein