Ir ao conteúdo
  • Cadastre-se
alesilva90

Programa que soma números primos

Recommended Posts

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);}

Compartilhar este post


Link para o post
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);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
         


  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);
            }

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×