Maison > Article > développement back-end > Exemple d'utilisation de Python pour détecter les nombres premiers
Cet article présente principalement la méthode de détection des nombres premiers Python. Il analyse les compétences associées à la détection des nombres premiers Python avec des exemples. Les détails sont les suivants :
Détection du facteur :
Facteur de détection, complexité temporelle O(n^(1/2))def is_prime(n): if n < 2: return False for i in xrange(2, int(n**0.5+1)): if n%i == 0: return False return True
Petit théorème de Fermat :
Si n est un nombre premier et a est un entier positif inférieur à n, alors la nième puissance de a est congrue à un modulo nMéthode de mise en œuvre : Choisissez une base (par exemple 2), pour un grand entier p, si 2^(p-1) et 1 ne sont pas congrus modulo p, alors p ne doit pas être un nombre premier sinon, p est susceptible d'être un ; le nombre premier2**(n-1 )%n n'est pas un nombre facile à calculer
(a^b) % p = ((a % p)^b) % p (a * b) % p = (a % p * b % p) % pCalculer X^N(% P)Peut
si N est un nombre pair, alors X^N = (X*X)^[N/2]
Si N est un nombre impair, alors X^N = X* ; X^(N-1) = X * (X*X)^[ N/2];
def xn_mod_p(x, n, p): if n == 0: return 1 res = xn_mod_p((x*x)%p, n>>1, p) if n&1 != 0: res = (res*x)%p return resIl peut également être résumé comme l'algorithme suivant Les deux fonctions sont les mêmes
def xn_mod_p2(x, n, p): res = 1 n_bin = bin(n)[2:] for i in range(0, len(n_bin)): res = res**2 % p if n_bin[i] == '1': res = res * x % p return resGrâce au traitement rapide de l'opération d'exponentiation modulaire, la détection de Fermat peut être réaliséeLe test de Fermat est précis lorsqu'il donne une conclusion négative, mais la conclusion positive peut être fausse. grands entiers, et le taux de faux positifs diminue à mesure que l'entier augmente
def fermat_test_prime(n): if n == 1: return False if n == 2: return True res = xn_mod_p(2, n-1, n) return res == 1
Test de MILLER-RABIN
Le test de Miller-Rabin est actuellement largement utiliséThéorème de détection quadratique : si p est un nombre premier et 0Le test de Miller est effectué k fois, la probabilité d'erreur du traitement des nombres composés comme des nombres premiers ne dépassera pas 4^(-k)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!