Enviar um café pro programador

Primos em Python - Como Saber se um Número é Primo ?

Neste nosso Tutorial de Python, vamos falar sobre os números primos.

Vamos te explicar o que é, sua importância, onde são usados e o principal: como criar um programa que checa se um determinado inteiro positivo é um número primo ou não.

Como ser um excelente programador

Bem, chegou a hora de realmente colocar a mão na massa e começar a programar, ok?

Antes, gostaríamos de sugerir o nosso texto 'Como ser um excelente programador', nele a gente vai te orientar sobre:
  1. O que estudar
  2. Como estudar programação da maneira correta
  3. O que é importante estudar
  4. Quais linguagens é bom saber
  5. Qual a melhor a melhor linguagem de programação
  6. Como entrar no mercado do trabalho
  7. Como se portar corretamente numa entrevista de emprego
  8. A característica mais importante que um programador deve ter

É simplesmente tudo que eu gostaria de saber antes de começar minha carreira de programador. Se eu tivesse lido o texto no início de meus estudos, teria aprendido programação bem mais rapidamente e mais corretamente. Sério, não deixem de ler, vai mudar sua vida.

Acesse nossa apostila para ler:


Os Números Primos

Um número é dito primo quando é possível dividir ele (divisão de inteiro com inteiro) por 1 e por ele mesmo.

Exemplos de números primos:
2, 3, 5, 7,  11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373 ...

Pode sair tentando dividir esses daí por outro número menor, que não seja 1 ou ele mesmo, que não vai conseguir.


Exemplos de números que não são primos:
4: É possível dividir por 1, 2, e 4
6: É possível dividir por 1, 2, 3 e 6
8: É possível dividir por 1, 2, 4 e 8
2112: É divisível por 2 3 4 6 8 11 12 16 22 24 32 33 44 48 64 66 88 96 132 176 192 264 352 528 704 e 1056

Primos: Para que servem ?

Não, não é um conjunto inútil e sem sentido de números.
Se fosse, nem seriam estudados.

O assunto número primo é um dos mais pesquisados, estudados e misteriosos da história da humanidade.

Até hoje, não se tem uma fórmula para se criar números primos.
Ainda não descobriram um 'padrão' definitivo.

Um dos usos mais importante é no ramo da criptografia, principalmente com o algoritmo do sistema RSA.

Existem dois tipos de cigarras que possuem ciclos de vida de 13 e 17 anos, assim somente a cada 221 anos elas tem que dividir a floresta quando saem da terra, evitando se encontrar, o que prejudicaria sua permanência na natureza.

Enfim, se pesquisar na internet, vai achar uma infinidade de coisas onde os números primos estão metidos no dia-a-dia.

Há até quem use os números primos para ganhar na Mega-Sena.

Checar se um número é primo

Como Determinar e Verificar se um Número é Primo em Python

Vamos ver o problema que deu origem a este tutorial de Python, de nossa Lista de Exercícios de Laços e Loops


Inicialmente, pedimos um número inteiro e positivo para o usuário e armazenamos na variável n.

Vamos armazenar na variável mult o número de múltiplos que existe de 2 até n-1.

Ou seja, do intervalo (2, 3, 4, ..., n-1)
Isso é obtido usando a função range: range(2,n).

Vamos usar a variável count pra receber cada um desses valores, dentro desse intervalo.

Dentro do looping, temos que testar se o resto da divisão de n por count vai ser 0. Se for, é porque n é múltiplo de count, logo não é primo.

A medida que nosso programa ai encontrando múltiplos, conta eles na variável mult e exibe na tela.

Após terminar o laço, testamos o valor de mult.
Se permanecer zerado, é porque o número fornecido pelo usuário é primo.

Vejamos nosso código Python:

n = int(input("Verificar numeros primos ate: "))
mult=0

for count in range(2,n):
    if (n % count == 0):
        print("Múltiplo de",count)
        mult += 1

if(mult==0):
    print("É primo")
else:
    print("Tem",mult," múltiplos acima de 2 e abaixo de",n)

Desafio: crie um script em Python que checa se um número fornecido pelo usuário é primo ou não, usando laço while dessa vez.

Poste no comentário sua solução.


42 comentários:

  1. n = int(input("Digite um número inteiro: "))
    cont = 0
    i = 0

    while i <= n or cont < 2:
    i = i + 1
    x = n % i
    if x == 0:
    cont = cont + 1

    if cont <= 2:
    print("primo")
    else:

    print("não primo")

    ResponderExcluir
  2. count = 0
    n = int(input('Número: '))
    mult = 0

    while mult <= n or count < 2:
    mult += 1
    p = n % mult
    if p == 0:
    count += 1
    print('Multiplos ', mult)
    if count <= 2:
    print('Primo')
    else:
    print('Não é primo')

    ResponderExcluir
  3. eu vi um erro nesse programa, ao colocar se a resposta for 1 ele vai dar que é primo, apesar de 1 não ser primo,então pra resolver eu coloquei
    if mult == 0 and n >=2:
    acho bom corrigir, apesar de ser um pequeno erro ainda é um erro

    ResponderExcluir
  4. n = int(input("Digite um número inteiro: "))

    i = 2
    res = False

    while i < n and not res:
    x = n % i
    if x == 0:
    res = True
    i += 1

    if res:
    print("não primo")
    else:
    print("primo")

    ResponderExcluir
  5. num = input("Digite o número: ")
    num = int(num)
    div = 2
    primo = True
    mini = num/2

    while div <= mini:
    if num%div == 0:
    primo = False
    print("É divisível por: ", div)
    div += 1
    if num <= 1:
    primo = False

    if primo == True:
    print("É primo")
    else:
    print("Não é primo")

    ResponderExcluir
    Respostas
    1. n1 = int(input('digite um numero para saber se ele é primo:'))
      c = 0
      for i in range(2, n1+1):
      if n1 % i== 0:
      c = c+1
      if c <= 2:
      print('O numero {} é divisivel {} vezes portanto ele é um numero primo'.format(n1, c+1))
      else:
      print('O numero {} é divisivel {} vezes, portanto ele não é um nuero primo'.format(n1,c))

      Excluir
  6. num = int(input("Enter a number: "))

    if num > 1:
    for i in range(2,num):
    if (num % i) == 0:
    print(num,"is not a prime number")

    break
    else:
    print(num,"is a prime number")

    else:
    print(num,"is not a prime number")

    Pessoal, este programa está rodando! :)
    Porém, além disso, eu quero saber os divisores de um número que não for primo.

    Por exemplo: 45 não é primo e seus divisores são: 1,3,5,9,15,45.

    Como posso aplicar isto nesse código? Alguém sabe?

    ResponderExcluir
    Respostas
    1. Você pode fazer uma lista e preencher ela.

      def extra():
      ....x, mult = 2, 0
      ....n = 45 #Estou colocando o 45 conforme exemplo que você pediu.
      ....lista = []
      ....while(x<n):
      ........if(n % x == 0):
      ............lista.append(x)
      ............mult += 1
      ........x+=1
      ....else:
      ........if(mult==0):
      ............print("É primo.")
      ........else:
      ............print(n,"não é primo e seus divisores são:", lista)

      Obs.: Substitua os pontos por espaços.

      Excluir
  7. – Desenvolva uma classe que apresente todos os números primos existentes entre N1 e N2, em que N1
    e N2 são números naturais fornecidos. Um número é primo quando é divisível somente por ele e pela unidade
    (1).


    Alguem pode me dar uma luz de como fazer????

    ResponderExcluir
    Respostas
    1. def numeroprimo(a,b):
      x=0
      y=0
      for y in range(a, b+1):
      for i in range (2, y):
      resto = (y % i)
      if y!=i and y!=1 and resto!=0:
      x +=resto
      else:
      x=0
      break
      if x > 0 or y==2:
      print(y)
      y+=1


      numeroprimo(998983, 999983)

      Excluir
  8. Alguém consegue me dar uma ajuda no exercício abaixo?

    Números primos são números naturais maiores que 1 e não são produtos de dois outros números naturais positivos. Por exemplo, 5 é um número primo, pois não existe par de números entre 2 e 4 cuja multiplicação é igual a 5. Já 6 não é um número primo, pois existe um par entre 2 e 5 cujo resultado é igual a 6, o par é 2 e 3. Números primos são muito úteis em computação e despertam a curiosidade de matemáticos há séculos. Para essa oficina, você vai usar uma definição diferente, da apresentada acima, mas equivalente. Observe: um número X é primo se para todo número N entre 2 e X – 1, o resto da divisão entre X e N é diferente de 0. Seguindo essa lógica, desenvolva um notebook Jupyter com um programa Python que apresente textualmente todos os números primos entre 2 e 100 (incluindo o valor 100). Para tal, seu programa deve percorrer todos os números nesse intervalo e testar individualmente cada um, vendo se ele é primo ou não. Caso o número seja primo, você deve imprimir o valor em tela, caso não seja, deve simplesmente ignorá-lo.

    ResponderExcluir
  9. l = []
    a = int(input())
    for i in range(1, a+1):
    (l).append(a%i)
    r = (l.count(0))
    if r == 2:
    print('primo')
    else:
    print('não é primo')

    ResponderExcluir
  10. Este comentário foi removido pelo autor.

    ResponderExcluir
  11. fiz um algoritmo bem simples e fácil de ser compreendido:

    def prime_checker(number): #AQUI DECLARO MINHA FUNCAO
    divisor = 0 #CRIO UMA VARIAVEL QUE VAI CONTAR O NUMERO DE DIVISORES
    if number != 0 and number != 1: #ELIMINO 0 1 JA QUE ELE NAO SAO PRIMOS
    for c in range(1 , number +1):#CONTADOR QUE DESCOBRE QUANTOS NUMEROS SAO DIVISIVEIS
    if number % c == 0: #SE O NUMERO FOR DIVISIVEL POR C, É ACRESCENTADO + 1 NO DIVISOR
    divisor += 1
    if divisor == 2: #TERMINADO O FOR, SE DIVISOR FOR IGUAL A 2 (1 E ELE MESMO) É PRIMO
    print("Numero primo")
    else:
    print("Numero nao primo")
    else:
    print("Numero não primo")

    ResponderExcluir
  12. num=int(input("Digite um numero: "))

    for cont in range(2,num):
    if num%cont==0:
    print("Não é primo")
    break
    else:
    print("É primo")

    ResponderExcluir
  13. considerando procurar se o numero 10001 se é primo ou nao,
    o resultado foi de 2 multiplo ( 73, 137)
    no caso o programa poderia ir ate o giro 137, nao precisa fazer ele dividir por ate 9999 no caso, para descobrir se é primo, pois qqer numero acima de 137, nao vai ter resultado 0. assim diminiu o tempo de processamento. como limitar isso?

    ResponderExcluir
    Respostas
    1. Voce pode calcular R como raiz quadrada de n e testar o 2 e os impares apenas até R. tsso reduz bastante. Ex : para 10001 R é 100 (aprox.) Teste apenas 2,3,5,7,...99. Veja que 137 = 10001 / 73(que vc já encontra antes do 99)

      Excluir
  14. num = int(input('Verificar se número é primo: '))
    div = 0

    for i in range(1, num+1): # Para i em uma distância de 1 a num + 1.
    ----if num % i == 0: # Se houver divisores sem resto, entre neste bloco e adicione +1 na variável div.
    --------div += 1
    if div == 2: # Ao sair do laço for, verifique se div é igual a 2. (Número divisivel por 1 e por ele mesmo).
    ----print('Primo')
    else: # Se for maior ou menor que 2, diga que não é primo.
    ----print('Não primo')

    ResponderExcluir
  15. num = int(input('Verificar se número é primo: '))
    contador, divisores = 1, 0
    while True:
    ----if num % contador == 0: # Verifica se não sobra resto na divisão do num pelo contador.
    --------divisores += 1 # Se não sobrou, adiciona + 1 para variável divisores.
    ----contador += 1 # Depois do if, aumenta + 1 no contador
    ----if contador == num+1: # Se o contador for igual o número + 1 que vc quis verificar, entre neste bloco.
    --------if divisores == 2: # Verifica se tem só 2 divisores (Dividido por 1 e por ele mesmo).
    ------------print('É primo.')
    ------------break # Se for primo, diga que é primo e pare o programa.
    --------else:
    ------------print('Não é primo.')
    ------------break # Senão, diga que não é primo e pare o programa

    ResponderExcluir
  16. n = int(input('Digite o número: '))
    contador = 1
    contador1 = 0
    while contador <= n:
    if n % contador == 0:
    contador1 = contador1+1
    contador = contador+1
    if contador1==2:
    print('O número é primo!')
    else:
    print('O número não é primo!')

    ResponderExcluir
  17. n = int(input('Digite o número: '))
    contador = 1
    contador1 = 0
    while contador <= n:
    if n % contador == 0:
    contador1 = contador1+1
    contador = contador+1
    if contador1==2:
    print('O número é primo!')
    else:
    print('O número não é primo!')

    ResponderExcluir
    Respostas
    1. tenho uma dúvida sobre esse contador 1, de onde vem o valor que define ele como igual a 2 ou não?

      Excluir
  18. tá errado esse código, no final do loop precisa zerar o mult += 1

    ResponderExcluir
    Respostas
    1. me ajude com esse exercico :Implemente uma função que, dado um número n maior que 2, devolve uma String com todos os
      números primos menores ou iguais a n, separados por espaços em branco.

      Excluir
  19. Me ajuda nesse exercício :
    Implemente uma função que, dado um número n maior que 2, devolve uma String com todos os números primos menores ou iguais a n, separados por espaços em branco.
    ex: primo(10)
    "2 ,3, 5, '

    ResponderExcluir
  20. n = int(input("Verificar numeros primos ate: "))
    mult=0
    count=2

    while count<=n:
    if (n % count == 0):
    print("Múltiplo de",count)
    mult += 1
    count=count+1

    if(mult==1):
    print("É primo")
    else:
    print("Tem",mult," múltiplos acima de 2 e abaixo de",n)

    ResponderExcluir
  21. A solução acima foi escrita por mim, contudo, saiu como Desconhecido. Eu achei essa solução como a mais simples.

    ResponderExcluir
  22. Escreva um programa em Python que recebe um número inteiro. O programa deve apresentar
    uma mensagem ao usuário destacando:
    • o tipo
    • se o número é par ou ímpar
    • se é múltiplo de 4
    • se é primo


    Consegui realizar uma parte, porém na parte de ver se o nunero é primo não consegui algm pode me ajudar ?

    num = int(input("Digite um numero:"))
    print(type (num))
    resultado = num % 2
    if resultado == 0:
    print(num,"é um numero par")
    else:
    print(num,"é um número ímpar")
    if not(num % 4):
    print(num,"é multiplo de 4")
    else:
    print(num,"Nao é multiplo de 4")

    ResponderExcluir
  23. alguem pode me ajudar?
    Escreva um programa que mostre todos os números primos de 1 a 1000000.
    com a função def eh_primo:

    ResponderExcluir
  24. #Com laço for:
    num = int(input("Entre com um número inteiro: "))
    for valor in range(2,num):
    if num % valor == 0 or num == 1:
    print(num,"não é primo")
    break
    else:
    print(num,"é primo")
    #------------------------------#
    #Com while:
    n = int(input("Digite um número inteiro: "))
    i = 1
    primo = 0
    while i <= n:
    if n % i == 0:
    primo+=1
    i+=1
    if primo == 2:
    print("primo")
    else:
    print("não primo")

    ResponderExcluir
  25. def éPrimo(k):
    divisor = k - 1
    resto = 1
    if k == 1:
    resto = 0
    else:
    while divisor > 1 or resto > 1:
    resto = k % divisor
    divisor = divisor - 1

    if(divisor == 1 and resto > 0):
    return True
    else:
    return False

    ResponderExcluir
  26. Correção do último código postado:

    def éPrimo(k):
    divisor = k - 1
    resto = 1
    if k == 1:
    resto = 0
    else:
    while divisor > 1 and resto != 0:
    resto = k % divisor
    divisor = divisor - 1

    if(divisor == 1 and resto > 0):
    return True
    else:
    return False

    ResponderExcluir
  27. def eh_primo(n):
    if n >= 2:
    for c in range(2, n):
    if n % c == 0:
    return False
    return True
    else:
    raise ValueError('Número deve ser maior ou igual a 2.')

    ResponderExcluir
  28. def eh_primo(n):
    if n >= 2:
    for c in range(2, n):
    if n % c == 0:
    return False
    return True
    else:
    raise ValueError('Número deve ser maior ou igual a 2.')

    ResponderExcluir
  29. numero = int(input("Digite um valor: "))

    n = 2
    mult = 0
    while n <= numero:

    if numero % n == 0:
    mult += 1

    n += 1

    if mult == 1:
    print("e primo")
    else:
    print("nao e primo")

    ResponderExcluir
  30. numero = int(input("Digite um valor: "))

    n = 2
    mult = 0
    while n <= numero:

    if numero % n == 0:
    mult += 1

    n += 1

    if mult == 1:
    print("e primo")
    else:
    print("nao e primo")

    ResponderExcluir
  31. n1 = int(input('Digite um número para saber se ele é primo: '))
    n = 0
    for l in range(n1-1,2,-1):
    if ( n1 / l ).is_integer() == True :
    n += 1
    if n == 0 :
    print(n1,'É primo')
    else: print(n1,'Não é primo')

    ResponderExcluir
  32. def primo(numero):
    cont = 1
    for c in range(1,numero):
    if (numero) % c == 0 :
    cont += 1
    if cont == 2 :
    return True
    else:
    return False


    for i in range(1,101):
    if primo(i) is True:
    print(i)

    ResponderExcluir
  33. def vetor(n): # entrada

    primos = [True] * (n + 1)

    primos[0], primos[1] = False, False # decisão

    for p in range(2, int(n**0.5) + 1): #decisão
    if primos [p]:
    for i in range (p*p, n + 1, p): #decisão
    primos[i] = False


    num = [i for i in range (2, n + 1) if primos[i]] #loop
    return num

    n = int(input("Digite o valor de N: ")) # usuário
    print(vetor(n)) # printar na tela

    ResponderExcluir