Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leo Morais

numeros primos

Recommended Posts

ola galera,

o programa tem que somar os numero primos de 1 a 10

a logica e':

se o a divisao (i%j=0) soma 1 no controle

se o controle for igual a 2 o numero(i) e' primo,

pois o numero primo divide por 1 e por ele mesmo apenas.

porem o resultado nao bate

void main(){

    int  soma=0, i=0, j=0,num=0, controle=0;

    for(i=1; i<=10; i++){

        for(j=1; j<=i; j++){
                if(i % j ==0){
                    controle++;
                    if(controle==2){
                        soma=soma+i;
                        controle=0;

                    }

                }

        }
    }
         printf("A soma total eh de %d \n", soma);
}

agradeco desde ja

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro: existe uma boa discussão sobre o 1 ser primo ou não (se vc incluir números negativos, a coisa esquenta mais ainda). Mas a princípio, não é considerado um número primo, então eu iniciaria o loop a partir de 2. Veja com seu professor, porque isso é um caso extremo que pode descontar pontos da solução.

 

http://primes.utm.edu/notes/faq/one.html

http://mathworld.wolfram.com/PrimeNumber.html

 

O loop mais interno também pode ser iniciado a partir de 2, já que qualquer natural é divisível por 1 (não faz sentido verificar isso). Como vc só está verificando se existe mais um divisor (e não precisa imprimir a fatoração do número), não precisa de contador. Só uma outra variável boolean ou int, que diz se o número é primo ou não, já dá conta do recado:

 

 

int main(void) {
   int soma; intervalo; divisor;
   int eh_primo;
 
   soma = 0;
   for (intervalo = 2;  intervalo <= 10; intervalo++) {
      eh_primo = 1; // Dizemos que o número atual é primo, antes de mais nada.
 
      // "Prova por contradição": se falamos que o número é primo, então não pode haver outro divisor. Mas se o loop
      // de verificação terminar assim que for encontrado um fator, acaba contradizendo o que falamos sobre o número anteriormente.
      for(divisor = 2; divisor <= intervalo && eh_primo == 1; divisor++) {
          if (intervalo % divisor == 0)
             eh_primo = 0;
      }
 
      if (eh_primo)
          soma += intervalo;
   }
 
   printf("%d\n", soma);
   return 0;
}

 

Existem otimizações p/ não precisar percorrer todo o intervalo, mas veja isso se for realmente necessário e se quiser.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.