Recherche de nombres premiers par méthode de filtrage (code C++ et Python)

Recherche de nombres premiers par méthode de filtrage (code C++ et Python)

La méthode Sieve, également connue sous le nom de Tamis d'Ératosthène, est un algorithme simple et efficace pour résoudre les nombres premiers.
Utilisez la méthode de filtrage pour trouver des nombres premiers, en commençant par 2 et en passant par sqrt(n) (sqrt représente la racine carrée). Pourquoi peut-il être parcouru jusqu'à sqrt(n) ?
Lors de la recherche de nombres premiers par tamisage, nous devons déterminer si un nombre est premier. Supposons que nous voulions déterminer si un nombre n est un nombre premier. S'il existe un facteur supérieur à 1 et inférieur à n, alors il doit y avoir deux facteurs a et b, où a<=sqrt(n), b>=sqrt (n). Si a et b sont tous deux supérieurs à sqrt(n), alors leur produit ab est supérieur à n, ce qui contredit l'hypothèse. Par conséquent, si aucun facteur inférieur ou égal à sqrt(n) n’est trouvé avant de passer à sqrt(n), alors n est un nombre premier.
Par exemple, supposons que nous voulions déterminer si un nombre 25 est premier. Si nous commençons à parcourir de 2 à 25, nous pouvons constater que 2, 3, 4 et 5 ne peuvent pas diviser 25, mais lorsque nous passons à 5, nous pouvons nous arrêter, car la racine carrée de 5 est 5, et tout nombre supérieur à 5 Il n’est plus nécessaire de juger. Parce que si 25 a un facteur supérieur à 5, alors il doit avoir un facteur inférieur ou égal à 5, que nous aurions dû trouver avant de passer à 5.
Par conséquent, il suffit de parcourir jusqu'à sqrt(n), ce qui peut réduire les calculs inutiles et améliorer l'efficacité de l'algorithme.

Ce qui suit est le code C++ et Python pour résoudre les nombres premiers inférieurs à 100.

Code C++ :

#include <iostream>
#include <cmath>
using namespace std; 

bool isPrime(int num) {
    if (num <= 1) {
        return false;
    }
    for (int i = 2; i <= sqrt(num); i++) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}

int main() {
    for (int i = 2; i <= 100; i++) {
        if (isPrime(i)) {
            cout << i << " ";
        }
    }
    cout << endl;
    return 0;
}

Code Python :

import math

def is_prime(num):
    if num <= 1:
        return False
    for i in range(2, int(math.sqrt(num)) + 1):
        if num % i == 0:
            return False
    return True

for i in range(2, 101):
    if is_prime(i):
        print(i, end=" ")
print()

Supongo que te gusta

Origin blog.csdn.net/cnds123/article/details/133456523
Recomendado
Clasificación