Ir para conteúdo
Fórum Script Brasil
  • 0

Usando o loop FOR encontrar todos os números primos de 0 até 10.000.


Lucas Vieira Machado

Pergunta

Boa noite pessoal , sou eu de novo agora com uma outra duvida, estou tentando fazer um programa para encontrar números primos.

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

int main()
{

    int indice, indice1, n, valor; //variaveis para o laço FOR.
    
    
    printf("Digite o valor maximo para exibicao dos numeros primos: ");
    scanf("%d",&valor);
    
    //Atribuição de valores para variaveis
    n = 1; 
    valor = valor - 1;
    
    printf("2  ");//declarando que dois é primo.
    
    for (indice = 1; indice <= valor; indice ++){
         n++;


        for(indice1 = 2; indice1 <= (int)(n/2); indice1 ++){
                 if((n%indice1) == 0){ //por algum motivo so deu certo usando dois if ^^
                 break;
                 }
        }

        if( (n % indice1) != 0 ) {
                    printf("%i  ", n);//Exibição dos numeros primos.
        }   
    }
    printf("\n");
    system("pause");
    return 0;

}

Sera que a uma maneira de otimizar meu código, para economizar linhas de códigos e achar o resultado mais rapidamente.

Fico no aguardo^^

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Olá!

Olha como eu disse sou auto-didata e estou iniciando os meus estudos em C por isso não vou ser lá muito util, mas por coincidência ontem a noite antes de dormir achei este link http://www.hardware.com.br/comunidade/numero-primos/774925/ não sei se lhe será util mas até onde pude testar é bem mais rapido que o seu codigo na exibição de numeros ate 1000000!

#include <stdio.h>
#include <math.h>

int main(int argc, char **argv)
{

   int numero_inicial,numero_final;
   int i; // indexador do intervalo a ser testado
   int contador = 2; // variável de contagem do laço
   int controle; // Variável de controle

   float maximo; // cota superior para o loop de teste

   printf("Determinando os numeros primos num intervalo fixado \n");

   printf("Entre com o numero inicial maior ou igual a 2 ");
   scanf("%i",&numero_inicial);

   printf("Entre com o numero final ");
   scanf("%i",&numero_final);


   for(i = numero_inicial; i <= numero_final;i++)
   {
      controle = 0;
      maximo = sqrt((double) i);

      if (i == 2)
         controle = 1;
      else
      {
         while((i % contador) != 0 && (contador < (int) maximo))
         contador++;

         // Caso em que o loop termina apenas com a variável contador == i
         if (contador == i)
           --contador;

         controle = (i % contador)?1:0;
      }

      if (controle == 1)
         printf("%i  ",i);
      //else
        // printf("O numero %i nao e primo\n",i);

      contador = 2;

   }

   return(0);
}

Embora eu seja ainda incapaz de compreender ambos os códigos em suas totalidades, acredito que este código acima pode lhe lançar alguma luz para a otimização do seu código!

Espero ter ajudado ! ! !

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...