Jump to content

Não consigo imprimir os números primos entre o intervalo do Min e Max no laço while - Obs: sem usar range


CAIOG94

Postagens Recomendadas

image.pngimage.pngimage.png

 

Codigo: 

 

min = int(input("Digite um valor mínimo: ")) L=[] QTDE =0 soma=0 i=2 while min < 1: print("\n O valor digitado {} , deve ser obrigatoriamente maior que 1 \n".format(min)) min = int(input("Digite um valor mínimo: ")) max = int(input("Digite um valor máximo: ")) while max < min: print("\n O valor max {} , deve ser maior que valor min {} \n".format(max, min)) max = int(input("Digite o valor máximo: ")) L.append(min) L.append(max) if max > min: cont=min print("\nMin = {} e Max = {}\n".format(min, max)) while cont>=min and cont <= max : Resto = cont % i if Resto == 0: print(cont) soma = soma + cont QTDE=QTDE +1 cont = cont + 1 if QTDE > 0 : print("\n Quantidade de primos no intervalo {} é = {}".format(L,QTDE)) print(" Soma dos primos no intervalo {} é = {}".format(L, soma)) else: print(" Não há primos no intervalo {}".format(L)) print("\n\nFim do Programa")

 

Não estou conseguindo imprimir somente os números primos dentre o intervalo do número minimo e numero maximo.

 

obs: Não devo usar range

@geovaniif

Link to comment
Compartilhe em outros sites

o problema ta na lógica.

O que você montou basicamente encontra os números PARES, pois vc verifica se ele tem uma divisão inteiro por 2.

Os numeros primos, nenhum numero deve conseguir dividir ele, exceto o 1 e ele mesmo.

Basicamente vai ser um while com um while dentro. O Primeiro while vc já fez que é pra iterar sobre os numeros entre o min e o max.

O segundo while vai ser pra tentar dividir todos os numeros entre 1 e o próprio numero (no caso o proóprio número é o número do while anterior, que você está chamando de count). Vamos chamar o numero do segundo while de divisor. Numa conta de dividir, temos o dividendo, dessa forma você tem os numeros para tentar dividir

image.png

vamos supor que o min seja 20 e o max seja 30

você vai tentar dividir o 20 por todos os números anteriores a ele até o 2. Se algum desses números conseguir dividir de forma inteira, ele é primo. No caso do 20, sabemos que ele é divisível por 2, logo já podemos interromper o while do divisor e pular para o próximo dividendo, que é 21. 21 não é divisível por 2, então o while interno vai dar pelo menos "1 volta". Na segunda volta, o nosso divisor vale 3, e 21 é divido por 3, pode interromper e passar pro proximo dividendo. 22 é par, logo sabemos que também não é primo, o que finalmente nos leva pro 23.

No 23, nenhum numero que vai de 2 até 22 é consegue dividir ele, ou seja, o while do divisor vai iterar até o fim e não vai conseguir encontra um divisor que divida esse numero, e isso o caracteriza como primo! só printar!

 

Essa é uma lógica "simples" que vc consegue esse resultado. O Problema é que a complexidade é muito alta (O²) o que torna o algoritmo extremamente lento, mas é uma solução válida se o problema não exige uma grande de complexidade máxima (o que provavelmente não exige).

 

 

da uma digerida e uma pensada nisso 😅

Link to comment
Compartilhe em outros sites

Juro que estou tentando usar a logica ,mas não esta indo nao. @geovaniif

 

Código abaixo:

min = int(input("Digite um valor mínimo: "))

L=[]

QTDE =0

soma=0

divisor=2

cont2=0

primo =True

while min < 1:

print("\n O valor digitado {} , deve ser obrigatoriamente maior que 1 \n".format(min))

min = int(input("Digite um valor mínimo: "))

max = int(input("Digite um valor máximo: "))

while max < min:

print("\n O valor max {} , deve ser maior que valor min {} \n".format(max, min))

max = int(input("Digite o valor máximo: "))

L.append(min)

L.append(max)

if max > min:

cont=min

print("\nMin = {} e Max = {}\n".format(min, max))

while cont>=min and cont <= max :

Resto = cont % divisor

while divisor > cont and primo:

if cont % divisor ==0:

print(cont)

primo =False

soma = soma + cont

QTDE=QTDE +1

cont = cont + 1

if primo: cont2 += 1 if cont2>1:

print("\n Quantidade de primos no intervalo {} é = {}".format(L,QTDE))

print(" Soma dos primos no intervalo {} é = {}".format(L, soma))

else:

print(" Não há primos no intervalo {}".format(L)) print("\n\nFim do Programa")

image.png

image.png

image.png

Link to comment
Compartilhe em outros sites

calma, é melhor vc quebrar em partes, vc precisa pensar num passo a passo, num algoritmo. O problema que você está tendo não é de programação, é de lógica/algoritmo.

Vamos fazer pequenos algoritmos e ir evoluindo ele.

Bom, vamos pensar assim. Você tem o min e tem o max. Alí vc ja trata, ta perfeito, temos o min e o max, o min é menor que o max e tudo ok.

 

Agora, vc tem que iterar e printar todos os numeros entre o min e o max, incluindo eles mesmo.
Agora que vc conseguiu iterar e pegar todos os numeros, dentro dessa iteração, cria outra iteração que pega todos os numeros entre 1 e o numero ta iteração atual. Então se o min é 10 e o max é 15, na primeira iteração, o que pegamos é o 10, e então iteramos pegando todos os numeros de 1 até 10.
Certo, agora, nós temos todos os dividendos e todos os divisores.
a partir dai é só começar a testar a divisão, e caso ela não aconteça, a gente pega o numero e printa ele

Link to comment
Compartilhe em outros sites

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...