CAIOG94 Posted April 2, 2022 Share Posted April 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 Share on other sites More sharing options...
geovaniif Posted April 2, 2022 Share Posted April 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 Share on other sites More sharing options...
CAIOG94 Posted April 2, 2022 Author Share Posted April 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 Share on other sites More sharing options...
geovaniif Posted April 2, 2022 Share Posted April 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 Share on other sites More sharing options...
geovaniif Posted April 2, 2022 Share Posted April 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 Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now