Ir ao conteúdo
  • Cadastre-se

Programa que soma números primos


alesilva90

Posts recomendados

Pessoal, esse programa tem que identificar e somar o números primos dentre dez digitados, eu fiz o código abaixo, mas não funciona... já perdi muito tempo procurando onde estou errando, se puderem me ajudar dando dicas ou apontando onde errei eu agradeço...
 

#include <stdio.h>#include <conio.h>main(){int num,i,divisor,cont=0,soma_primo=0;for (i=1;i<=10;i++){printf("\n\n Digite um numero: ");scanf("%d",&num);for(divisor=1;divisor<=num;divisor++){if((num%divisor)==0){cont++;}if(cont==2){soma_primo=soma_primo+num;}}}printf("\n\n Soma dos numeros primos: %d",soma_primo);}
Link para o comentário
Compartilhar em outros sites

Olá,

é interessante dividir o programa em duas partes, um com uma função para detectar se é primo ou não e outra para realizar a soma, veja:

#include <stdio.h>

int isPrimo(int numero){
int i; //Variável de controle do Loop
if(numero > 1){ //Caso a var número for 0 ou 1 retornamos 0(falso)
for(i=2;i<numero;i++) //Loop de iteração
{
if(numero%i == 0) //Caso o resto da divisão de numero/i=0 o número não é primo
return 0;
}
return 1; //Caso contrário o número é primo e retornamos 1(verdadeiro)
}else
return 0;
}

main(){
int numeros[10];
int i;
int soma=0;

for (i=0;i<10;i++){
printf("\n\n Digite um numero: ");
scanf("%d",&numeros[i]);
if(isPrimo(numeros[i]))
soma+= numeros[i];
}
printf("Soma: %d\n",soma);
}

Link para o comentário
Compartilhar em outros sites

  • 7 meses depois...
         


  CalcPrimos calc = new CalcPrimos();


            Thread tr = new Thread(calc.CalPrimos);
            tr.Start();


            const string strTemplate = "Primos encontrados {0} Contador está em {1} com a media de tempo {2} para encontrar 100 primos.";
            double oldPrime = 0;
            DateTime dat1 = DateTime.Now;
            string Tempo = string.Empty;


            while (true)
            {
                if ((calc.PrimesSearch - oldPrime) >= 100)
                {
                    Tempo = (dat1 - DateTime.Now).ToString();
                    oldPrime = calc.PrimesSearch;
                    dat1 = DateTime.Now;
                }


                Console.WriteLine(string.Format(strTemplate, calc.PrimesSearch.ToString("N2"), calc.NumerosCalculados.ToString("N2"), Tempo));
                Console.SetCursorPosition(0,0);
            }
Link para o comentário
Compartilhar em outros sites

Olá,

é interessante dividir o programa em duas partes, um com uma função para detectar se é primo ou não e outra para realizar a soma, veja:

 

#include <stdio.h>int isPrimo(int numero){	int i;						//Variável de controle do Loop	if(numero > 1){				//Caso a var número for 0 ou 1 retornamos 0(falso)		for(i=2;i<numero;i++)	//Loop de iteração		{			if(numero%i == 0)	//Caso o resto da divisão de numero/i=0 o número não é primo					return 0;		}					return 1;	//Caso contrário o número é primo e retornamos 1(verdadeiro)	}else	return 0;}main(){	int numeros[10];	int i;	int soma=0;	for (i=0;i<10;i++){	printf("\n\n Digite um numero: ");	scanf("%d",&numeros[i]);		if(isPrimo(numeros[i]))			soma+= numeros[i];		}		printf("Soma: %d\n",soma);}

 

 

 

Não precisa calcular de 2 até N. Nem contar os números pares.

 

Basta contar de ímpar em ímpar: 3, 5, 7, 9 ... inclusive testar divisão apenas com ímpares.

 

E além disso fazer o teste de divisão apenas até a raiz quadrada de N.

 

Ex : N=121 testar apenas com 3, 5, 7, 9

 

Ainda tem como melhorar mais, mas isso já deixa mais rápido.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...