Números Primos

Estou com uma dificuldade, se vocês puderem dar uma luz rsrs, fico agradecido. Escreva um programa que receba um número inteiro positivo na entrada e verifique se é primo. Se o número for primo, imprima “primo”. Caso contrário, imprima “não primo”. Eu já usei com condicional e com repetição , o problema é na hora de imprimir o valor 27, ele imprimi como sendo primo, 27 não é primo, testei outros valores e ele imprime certo os valores, só nesse valor que acontece esse erro, espero a colaboração de vocês, sei que é uma pergunta besta, estou iniciando no mundo da programação.

Segue meu códigos :

num=int(input("Digite um numero"))
contador=1
while contador <= num:
    if num%2==1:
        contador=contador+1
        print("primo")
        break
    else:
        print("não primo")
        break

código 2 : 

num=int(input("Digite um numero"))
if num%2==1:
    print("primo")
else:
    print("não primo")
numero = int(input("Digite um numero"))
divisores = 0
for divisor in range(1, numero):
    if numero % divisor == 0:
        divisores = divisores + 1
        if divisores > 1:
          break
if divisores > 1:
  print("não é primo")
else:
  print("é primo")

Código incorreto
0 e 1 não são números primos.

É verdade!
Ajuste ele para que mais ninguém copie errado.

    if choice == "n":
        valorMaximo = int(input("?!?: "))
        for valor in range(1,(valorMaximo+1)):
            check = 2
            resto = 0.1 
            while check < ((valor/2)+1) and resto > 0:
                resto = valor % check
                check += 1
            if resto is not 0:
                print(valor)
# um numero primo tem somente dois
#fatores 1 e a si mesmo.
factors = []
num =int(input('Qual numero testar? '))
for n in range(1,num+1):
 if num % n == 0:
  factors.append(n)
  if len(factors) > 2:
   print('o numero {} NAO eh primo'.format(n$
   break
if len(factors) == 2:
 print('o numero {} eh PRIMO'.format(num))

Eu faria assim, inspirado no programa factor que descobri recentemente no shell. kk

1 curtida

Minha contribuição.

def isprimo(numero):
    if numero != 0 & numero != 1:
        if numero > 3:
            for i in range(2, numero):
                if numero % i == 0:
                    return False
        return True
    return False

print("É primo" if isprimo(12) else "Não é primo")

Boa sorte a todos. :metal::sunglasses::metal:

1 curtida

Você está dizendo que um número primo é qualquer número que não é divisível por 2 nem por 3.
Está errado.

Bom dia, amigo.

Eu não vou nem discutir, pq baseado nos conceitos matemáticos você está absolutamente certo, porém, roda o código amigo. Baseado em seu comentário refatorei o código.

Abraços. :metal::sunglasses::metal:

Que bom que refatorou, pois o código antigo dizia que múltiplos de 5 eram primos.

Valeu o “toque” irmão. :metal::sunglasses::metal:

No meu caso precisei fazer sem o uso de bibliotecas matemáticas, então ficou assim:

import random
num = random.randint(1, 100)
x = 1
divisor = 0
while x <= num:
------result = num / x
------test = str(result).split(’.’)
------if num % x == 0 and test[1] == ‘0’:
------------divisor += 1
------------if divisor == 2 and num == x:
------------------print(“O número abaixo tem”, divisor, “divisores, então é primo.”)
------------elif divisor > 2 and num == x or divisor < 2 and num == x:
------------------print(“O número abaixo tem”, divisor, “divisor(es), então não é primo.”)
------x += 1
print(num)

queria entender, você inicia a variável divisores = 0 e no for vc entra com a variável divisor q não foi declarada anteriormente.
nas variáveis não precisam anunciadas no inicio ?

O divisor está sendo declarado no corpo do for:

for divisor in range(1, numero):

entendi
é q sou iniciante e não conheço ainda executador for
quer dizer de como vc colocou o for, vc declara tbm a variável?

valeu

Bom, existem vários algoritmos diferentes, mas um bem simples é ir dividindo o número por vários outros até encontrar um que o resto da divisão dê zero. Só que você não precisa testar com todos os números, dá para otimizar um pouco. Basta considerar que:

  • o único número par que também é primo é o 2
  • então se não for 2 e for par, eu já sei que não é primo
  • eu não preciso testar se é divisível por outros números pares (4, 6, 8, etc), pois se for, quer dizer também que é divisível por 2 (ou seja, é par, e portanto não é primo)

Sendo assim, ficaria desta forma:

num = int(input("Digite um numero"))
if num < 2: # 0 e 1 não são primos, e vou desconsiderar os números negativos
    print('não é primo')
elif num == 2: # 2 é o único número par que é primo
    print('primo')
elif num % 2 == 0: # se for par e não é 2, não é primo
    print('não é primo')
else: # aqui eu sei que o número é ímpar
    # só testo se é divisível por números ímpares
    for i in range(3, num // 2, 2):
        if num % i == 0:
            print('não é primo')
            break # não é primo, interrompe o for
    else:
        print('é primo')

Repare que 0 e 1 não são primos, e eu não incluí tratamento para números negativos (vai dizer que eles não são primos).

Depois eu testo se é 2 (se for, é primo). Se não for 2, eu vejo se é par (se for, não é primo).

Por fim, se o número for ímpar, eu testo se é divisível pelos números ímpares de 3 até a metade do número (sim, não precisa ir até num -e na verdade eu só precisaria ir até a raiz quadrada de num).

O range pula de 2 em 2, assim eu só testo se é divisível por números ímpares. Não precisa testar os números pares, pois se num fosse divisível por um número par, ele também seria divisível por 2 e teria entrado no elif num % 2 == 0.

E eu uso um for/else: se o for não for interrompido pelo break, ele entra no else (veja a documentação para mais detalhes).


[len(x) for x in list(map(lambda x: [operator.mod(len(range(1,x)), z) for z in range(1,x)], [item for item in range(2,50)])) if x.count(0) == 2]