CAIOG94 Postado Abril 2, 2022 Compartilhar Postado Abril 2, 2022 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 Outras opções de compartilhamento...
geovaniif Postado Abril 2, 2022 Compartilhar Postado Abril 2, 2022 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 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 Outras opções de compartilhamento...
CAIOG94 Postado Abril 2, 2022 Autor(a) Compartilhar Postado Abril 2, 2022 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") Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
geovaniif Postado Abril 2, 2022 Compartilhar Postado Abril 2, 2022 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 Outras opções de compartilhamento...
geovaniif Postado Abril 2, 2022 Compartilhar Postado Abril 2, 2022 Veja, eu tendo dividir entre todos os numeros, e se ele só for divisivel por 2 numeros (que é o 1 e o proprio numero), então ele é primo! 1 Link to comment Compartilhe em outros sites Outras opções de compartilhamento...
Postagens Recomendadas
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.
Criar minha conta agoraÉ bem rápido!
Entrar
Você já tem uma conta?
Entrar agoraFaça o login agora.