Informática, perguntado por Nossasenhora1829, 1 ano atrás

Faça um programa que calcule e mostre o produto dos números primos entre 92 e 1.478.

Soluções para a tarefa

Respondido por bokomoko
0
bom, a ideia aí é criar uma função que teste se um número é primo ou não. Essa função retorna verdadeiro se for primo ou falso se não for primo.

Depois de criada a função, fazemos um loop de 92 até 1478 e testamos cada um dos números. Se for primo, fazemos o produto. Senão, vamos para o próximo
seria algo mais ou menos assim
produto = 1  // que é o elemento neutro da multiplicacao (produto)
para x de 92 até 1478 faça
    se o x for primo entao
           produto = produto * x

aí tem umas manhas de programador.

Sabemos que os números pares não podem ser primos então não vamos testar 92 nem 1478 pois sabemos que eles são pares. vamos começar a testar de 93 até 1477 e vamos fazer o laço de 2 em 2 para testarmos apenas números ímpares.

Podemos otimizar o programa assim
para x de 93 até 1477 com passo 2 faça 
     se x for primo entao
            produto = produto * x

Observe que estou usando uma pseudo linguagem para dar a ideia do algoritmo

Como testar se o x é primo ? É o lance da funcao, certo ? 

Um número é considerado primo se ele não tem outro divisor além de 1 e ele mesmo. Se ele tiver algum divisor além de 1 e ele mesmo  o número é primo. Então vamos testar dividindo o número por 2, por 3 até acharmos (ou não) algum divisor. Se acharmos pelo menos 1 o número não é primo. Se acharmos nenhum, o número é primo.

Acontece que não precisamos testar TODOS os números entre 2 e o número propriamente dito. Primeiro vamos descartar os números pares pois isso reduz a metade o número de testes a serem feitos para cada número. Além disso, depois que atingirmos mais ou menos a raiz quadrada do número podemos desistir de procurar por outro divisor pois não vai ter

Sumarizando, para testar se um número é primo descartamos primeiro os números pares e vamos testar do 3 até mais ou menos a raiz quadrada do número se tem algum divisor. Se tiver, o número não é primo.

O pseudo código seria assim

funcao é-primo( numero inteiro) : lógico 
     se o resto do numero por 2 for 0 entao
               o numero é par, não pode ser primo
     senao ... o número é ímpar, pode ser primo ou não, vamos testar
              para x de 3 até a raiz quadrada do numero faça 
                     se o resto da divisao do numero por x for igual a 0 entao
                               retorne o numero não é primo
              se chegamos ao fim do loop então o número é primo

Em python o programa fica assim

# para usar a função sqrt() que calcula a raiz quadrada
import math

# função que retorna True se um número é primo 
def eh_primo( numero):
  if numero % 2 : # se o resto da divisao por 2 for diferente de 0
    for i in range(3,int(math.sqrt(numero))+1,2):   
      if not (numero % i):         # se o resto for 0 significa que x é divisor
        return False                  # retorna falso
    else:                               # else do for, ou seja, chegou ao fim e não achou
      return True                  # o número é primo mesmo
  return False               # o número é par, não pode ser primo

# programa principal

print()
produto = 1
for x in range(72,1478+1): 
        produto *= x
print(x)

# versao otimizada
# começa de 73 e vai apenas até 1477 de 2 em 2 
print()
produto = 1
for x in range(73, 1477+1):
     produto *= x
print(produto)

Detalhe. O produto de um monte de números vai dar um resultado enorme. Poucas linguagens são capazes de calcular um número tão grande. Python consegue. Ei-lo
16470230517820821084878017677177120129625924089296347621831375288849899915280830871033186039068765901001162514132983116316829492790953932140354622252110154664894564511088301425609306402596454256833441233367401866326893904061123649167583973356869612476193559148876012514540239856465116490800667205490572356538364801067756752307928966839069877205333657860113540310773769948229846004884934183929681117285604038936163647535153151660344932022590319762914943736278383935836184116103238385257996536124364710153857555207444846178550162304712197404305450101521206587889155058838437829679129109347249

Quer ver ele rodando ? 
https://repl.it/@bokomoko/produto-de-primos-num-intervalo

Perguntas interessantes