PROBLEMA: Utilizando a linguagem Python desenvolva um programa que calcula os 100 primeiros números primos.
Sabe-se que um número inteiro positivo n é primo se for divisível apenas por 1 e por ele mesmo. Por exemplo: 2, 3, 5, 7…
Portanto, dado um número inteiro n qualquer, devemos considerar o seguinte:
- Se n ≤ 1, n não é primo;
- senão, o algoritmo deverá procurar e contar seus divisores.
Uma solução possível é dada no algoritmo a seguir.
ALGORITMO:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
def primo(n): divisores = 0 for i in range(1, 100): if n % i == 0: divisores = divisores + 1 if divisores == 2: return 1 else: return 0 for i in range(1, 100): if primo(i) == 1: print(i) |
Explicando:
- A função
primo(n)
é definida. Ela recebe um argumenton
e retorna 1 se o número for primo e 0 caso contrário. - A variável
divisores
é inicializada com 0. - O loop
for
percorre todos os números de 1 a 100 (inclusive). Para cada númeroi
neste intervalo, verifica-se sen
é divisível pori
(n % i == 0
). - Se houver uma divisão sem resto, o número de divisores é incrementado (
divisores = divisores + 1
). - Após o loop, verifica-se se o número de divisores é igual a 2. Se for, significa que
n
é divisível apenas por 1 e por ele mesmo, então é primo e a função retorna 1. - Se o número de divisores não for igual a 2, significa que ele é divisível por outros números além de 1 e ele mesmo, então não é primo e a função retorna 0.
- O loop
for
externo percorre todos os números de 1 a 100 (inclusive). Para cada númeroi
, a funçãoprimo(i)
é chamada. - Se a função retornar 1 para algum número
i
, este número é impresso na tela.
—
Outra versão:
1 2 3 4 5 6 7 8 9 10 11 |
def primo(num): if num < 2: return False for i in range(2, num): if num % i == 0: return False return True for i in range(1, 100): if primo(i): print(i) |
Explicando:
- A função
primo(num)
é definida. Ela recebe um argumentonum
e retornaTrue
se esse número for primo, eFalse
caso contrário. - O primeiro passo dentro da função é verificar se
num
é menor que 2. Se for, retornaFalse
, pois nenhum número menor que 2 pode ser primo. - Em seguida, ocorre o loop
for
, que percorre todos os números de 2 anum-1
(inclusive). Para cada númeroi
neste intervalo, verifica-se senum
é divisível pori
(num % i == 0
). - Se houver alguma divisão sem resto, o número não é primo e a função retorna
False
. - Se o loop
for
terminar sem retornarFalse
, significa quenum
não é divisível por nenhum número no intervalo de 2 anum-1
, portanto é primo e a função retornaTrue
. - O loop
for
externo percorre todos os números de 1 a 100 (inclusive). Para cada númeroi
, a funçãoprimo(i)
é chamada. - Se a função retornar
True
para algum númeroi
, este número é impresso na tela.
—
*Atualizado em 30 de janeiro de 2023