Executando verificação de segurança...
2

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)

Carregando publicação patrocinada...
1

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.")
1

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

https://stackoverflow.com/questions/1801391/how-to-create-the-most-compact-mapping-n-%e2%86%92-isprimen-up-to-a-limit-n

Se você tiver alguma dúvida, comenta que volto para ajudar. Bons estudos

1
1

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.

0

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.")