Programa que soma números primos de 1 até um valor limite

Olá, sou completamente novo no mundo do python e de programaçao em geral, gostaria que me ajudassem a resolver a lógica por trás de um programa que possa somar apenas números primos entre 1 até um valor limite dado. já tentei de diversa formas raciocinar nessa questão, porém, não consigo prosseguir. Segunda a lógica, deve ser dito ao programa um valor limite para que seja verificado de 1 até ele, usando ‘for’, assim, cada novo siclo de ‘for’ é verificado se ele é divisível apenas por ele mesmo e 1, nesse caso, se for, soma-se esse valor primo numa flag ‘soma’. Uma das minhas tentativas foi:

lim = int(input('apresente um número limite: '))
soma = 0
num = 2

for i in range(1, lim+1):
if num % 2 != 0 and num % i == 0 and i == num or i == 1:
soma += num
num += 1

print(f’a soma é {soma+2}’)

Outra tentativa minha foi:

lim = int(input('apresente um número limite: '))
soma = 0
num = 1
tot = 0

for i in range(1, lim+1):
num += 1
if num % i == 0 and i == num or i == 1:
num += soma

print(f’a soma é {soma}’)

Por favor, quem poder me explicar, dê ênfase na lógica que foi usada, pois esse está sendo o meu grande problema.
Quero ressaltar, ainda, que sou extremamente novo nesse mundo da programação, então, por favor, apesar de ser uma dúvida muito básica, para mim, ela está sendo tremendamente complicada.

Você deve ter uma função que retone true se o número for primo. Seguindo essa lógica:

  1. Um for que vai de 2 a num/2 (o número testado)
  2. Para cada interação você testa se num%j==0. Se sim! O número num, possui um divisor diferente de 1 e num, então retorne false.
  3. Caso termine o loop (ou seja não foi encontrado divisores) retorne true.

Um exemplo em java (A linguagem que conheço):

public static void main(String[] args){

    int soma = 0;

    //para somar de 1 a 10
    for(int i=1; i<=10;i++){
        // função testa se i é primo, retona true se for!
        if(ehPrimo(i)){
             soma+=i;
        }
    }
    //mostra o resultado
    System.out.println("Total: "+ soma);
}
 
//A Função!
public static boolean ehPrimo(int num){

    //Um caso particular! 1 não é primo.
    if(num==1){
         return false;
    }

    //Devemos procurar um divisor de 2 até a metade do número. Se não foi encontrado então o número é primo!
    for(int j = 2; j<=num/2;j++){

           //Encontrou um divisor diferente de 1 e num. Não é primo!
            if(num%j==0){
                 return false;
            }
     }

     //não encontrou nenhum divisor! É primo.
    return true;
}

Se você entendeu a lógica, pode adaptar para Python. Espero ter ajudado.

1 curtida

Opa! Passando aqui só para deixar a versão em Python!

#Função para testar se é primo!
def testaPrimo(num):
    # 1 não é primo!
	if (num == 1):
	 	return False

    #Devomos procurar um dividsor de 2 até a metade do número. Se existir pelo menos um, não é primo!
	for d in range(2,(int)(num/2)+1):
	 
		if (num % d == 0):
		 return False
	
	# Se o loop terminar e não encontrar divisores, o número é primo!
	else:
	 return True
#fim da função

soma = 0
#Soma todos os primos de 1 a 10
#2+3+5+7 = 17
for i in range(1, 11):
	if (testaPrimo(i)):
		 soma += i

else:
	print(soma)
1 curtida

poxa cara, muito obrigado pela ajuda e pelo esforço, me ajudou bastante :wink:

1 curtida