Melhor solução para Números Primos com Python
Pessoal, Eu estou estudando python e fiz uma solução de algoritmo para saber se o número é primo ou não. Eu gostaria da opinião de vocês, se a solução é boa ou não, e onde posso melhorar. Ou se existe uma solução muito melhor e que seja completamente diferente. Valeu!
num = int(input("Digite um número: "))
if num == 2: print(" O número 2 é primo.")
elif num % 2 == 0 or num == 1: print(" O número %d não é primo." % num)
else: print(" O número %d é primo." % num)
Como o Lorenzo citou vários números vai acusar como primo, sendo que ele é numero comum, no print, o que você pode usar também é o Format (f)
print(f"O número {num} não é primo.")
Você testou o seu código com alguns casos?
Por exemplo, se o número for 9, vamos imaginar.
Não vai passar pelo primeiro if
, pois 9 == 2
é falso
O segundo elif vai testar:
num = 9
# 9 % 2 é 1
# 9 == 1 é falso
Logo, não vai cair na condição e vai printar que o número é primo mesmo que 9 não seja um número primo.
Sobre números primos, todos os números primos maiores que 3 tem uma fórmula: 6n +/- 1 Você pode encontrar uma discussão sobre a prova desse conceito aqui
Sabendo isso, fica mais fácil de pensar em um algoritmo. Não quero te dar a resposta pra vc pensar sozinho, mas vou deixar algumas referências:
https://en.wikipedia.org/wiki/AKS_primality_test
Se você tiver alguma dúvida, comenta que volto para ajudar. Bons estudos
Eu acho que o problema está no conceito do que é número primo. Número primo é aquele que é divisivel somente por ele mesmo e por 1. Basicamente você precisa fazer um loop dividindo por todos os números entre 2 e o número em questão menos 1. Se tiver pelo menos 1 número em que o resto da divisão seja 0, esse numero não é primo.
Pessoal, com a ajuda de vocês eu refiz o código. Mas não copiei nenhum da internet, fiz a minha maneira, e pensando puramente no algoritmo (Sem pensar na eficiencia de memoria e tal...) acabou ficando assim:
numero = int(input("Digite o valor a ser sacado: "))
divisoes = 0
contador = numero
while contador > 0:
if numero % contador == 0:
divisoes = divisoes + 1
contador = contador - 1
if divisoes == 2: print (f"O numero {numero} é primo!") else: print(f"O numero {numero} NÃO é primo.")