English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Usar C ++¿Cuál es el algoritmo más rápido para encontrar números primos?

El筛Eratosthenes es cuando n es menor que10es uno de los métodos más eficientes para encontrar números primos menores que n cuando n es aproximadamente 00 mil.

Se proporciona un programa de demostración del筛Eratosthenes, como se muestra a continuación.

Ejemplo

#include <bits/stdc++.h>
using namespace std;
void SieveOfEratosthenes(int num) {
   bool pno[num+1];
   memset(pno, true, sizeof(pno));
   for (int i = 2; i*i <= num; i++) {
      if (pno[i] == true) {
         for (int j = i*2; j <= num; j + = i)
         pno[j] = false;
      }
   }
   for (int i = 2; i <= num; i++)
   if (pno[i])
   cout << i << " ";
}
int main() {
   int num = 15;
   cout << "Los números primos menores o iguales a " << num << " son: ";
   SieveOfEratosthenes(num);
   return 0;
}

Resultados de salida

La salida del programa anterior es la siguiente.

Los números primos menores o iguales a 15 son: 2 3 5 7 11 13

Ahora, permítanos entender el programa anterior.

Esta funciónSieveOfEratosthenes()Encuentra todos los números primos anteriores al num proporcionado como parámetro. El fragmento de código proporcionado es el siguiente.

void SieveOfEratosthenes(int num) {
   bool pno[num+1];
   memset(pno, true, sizeof(pno));
   for (int i = 2; i*i <= num; i++) {
      if (pno[i] == true) {
         for (int j = i*2; j <= num; j + = i)
         pno[j] = false;
      }
   }
   for (int i = 2; i <= num; i++)
   if (pno[i])
   cout << i << " ";
}

Esta funciónmain()Establece el valor de num y luego imprime todos los números primos menores o iguales a num. Esto se realiza mediante la llamada a una función.SieveOfEratosthenes()El fragmento de código proporcionado es el siguiente.

int main() {
   int num = 15;
   cout << "Los números primos menores o iguales a " << num << " son: ";
   SieveOfEratosthenes(num);
   return 0;
}