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 argumentone retorna 1 se o número for primo e 0 caso contrário. - A variável
divisoresé inicializada com 0. - O loop
forpercorre todos os números de 1 a 100 (inclusive). Para cada númeroineste 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
forexterno 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 argumentonume retornaTruese esse número for primo, eFalsecaso 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úmeroineste 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
forterminar sem retornarFalse, significa quenumnão é divisível por nenhum número no intervalo de 2 anum-1, portanto é primo e a função retornaTrue. - O loop
forexterno percorre todos os números de 1 a 100 (inclusive). Para cada númeroi, a funçãoprimo(i)é chamada. - Se a função retornar
Truepara algum númeroi, este número é impresso na tela.
—
*Atualizado em 30 de janeiro de 2023



