Programa em C

Iniciado por Rhyu, 03 de Janeiro de 2013, 20:25

tópico anterior - próximo tópico

Rhyu

#15
Então a ideia era ler o numero n ai ele testava n pra ver se ele tem mais de 2 divisores, caso ele tivesse ele incrementava n e testava dinovo, e assim sucessivamente ate encontrar o primeiro primo.


E que eu usei outro metodo pra verificar se e primo, nesse que voce sugere no caso ele começando em 2 e indo ate n-1 caso ele tenha algum divisor ele já nao e primo automaticamente ne?

irtigor

Isso mesmo. Pra encontrar erros é bom usar um depurador (gdb, por exemplo), mas pode ser um pouco demais, dependendo de até onde você pretende/precisa ir. Dá pra fazer "no papel" também (desse você não deve escapar), chamado de teste de mesa.

Rhyu

Bom primeiramente queria agracer a ajuda do irtigor para que eu conseguisse resolver o problema , segundo queria destacar que fiquei contente que mesmo com dicas consegui aprender bastante coisa.

#include <stdio.h>

main ()

{
  int n;
  int i;
  int j;
  int divisor;

  scanf ("%d",&n); //Le o numero n

   for (i = n ; i < 10000 ; i++)  //incrementa i ate achar o primeiro primo
   {
    divisor = 0;
    for (j = 2 ; j < i ; j++)  //testar se e primo
    {
      if (i % j == 0)
        divisor++;
    }
      if (divisor ==0) //se for primo para
        break;

   }
     printf ("Primo maior %d\n",i);  //imprimi o primo maior


     for (i = n ; i < 10000 ; i--) //decrementa i ate achar o primeiro primo menor
     {
      divisor = 0;
      for (j = 2 ; j < i ; j++)  //testar se e primo
      {
        if (i % j == 0)
          divisor++;
      }
       if (divisor == 0) //se for primo para
        break;
     }
     printf ("Primo menor %d\n",i);  //imprimi o menor primo
}


Acho que algo que ajudou bastante também foi ler logica de programação.
Abraço.

irtigor

Duas coisas:

- Pra achar o maior primo que é menor ou igual a n, a condição de parada ideal é i>1 (ou i >=2), porque o numero dois é o menor numero inteiro não negativo também primo (e você tá indo em direção à ele, e não deve passar).

- Nesse problema, você pode quebrar o laço [que verifica se é primo] assim que encontrar o primeiro divisor. Só pra otimizar.