How to find prime numbers in a list in Python
If you know the range of integers (or at least the maximum value), then the most efficient strategy would be to pre-prepare a list of prime numbers; build a python set of those values, and then test each number in the list as to whether it is in the set of primes.
Other wise you need a prime testing function :
In python this would be :
- def is_prime(n) :
- """Return True if n is a prime"""
- if n <= 1:
- return False
- if n < 4 or n==5:
- return True
- if n > 5 and abs(n%6) !=1:
- return False
- for v in range(2, int(n ** 0.5)+1):
- if n % v == 0:
- return False
- else:
- return True
lines 3 to 10 are specific shortcuts for prime numbers :
- line 3–4 : We know that 1 is not a prime
- line 6–7 : Sabemos que qualquer número inteiro menor que 4 é um prime (ou seja, 2 & 3)
- line 9 - 10 : sabemos que para todos os números inteiros maiores que 5, apenas os números inteiros que são 6n+1 ou 6n-1 podem ser primes (onde n é um número inteiro). Então podemos retornar rapidamente se o valor não for 6n+1 ou 6n-1.
Linhas 12 a 16 testa se o inteiro pode ser dividido por quaisquer outros inteiros de 2 a [matemática]\sqrt{n}[/math].
Os atalhos ajudam a melhorar a velocidade de execução por um fator de 3 aproximadamente já que podem descartar tantos números muito rapidamente - essencialmente o loop nas linhas 12 a 16 só é executado para 1/3 de todos os números (aqueles que são 6n+1 ou 6n-1).
Editar correções de bugs até onde eu posso dizer.
Artigos semelhantes
- How to write an algorithm in pseudocode that displays the sum of 5 numbers entered by the user and displays the smallest of the 5 numbers
- What are the best dubbed (English) completed animes, and where do I find them? I am seeking for a list and links.
- How to add a list to a Python dictionary
- What is a reliable VoIP provider that offers UK and German numbers, inbound + outbound and also has Android and iPhone apps?