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
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
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
Inglês,
9 meses atrás
Inglês,
9 meses atrás
Matemática,
9 meses atrás
Química,
1 ano atrás
Informática,
1 ano atrás
Português,
1 ano atrás
Matemática,
1 ano atrás
História,
1 ano atrás