1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Número primos em C

Discussão em 'Programação' iniciada por Xikinho90, 24 de Setembro de 2007. (Respostas: 16; Visualizações: 5431)

  1. Xikinho90

    Xikinho90 Power Member

    Boas pessoal estive agora a tentar fazer um algoritmo que pede um número ao utilizador e depois verifica se é primo ou não, mas apenas consegui com o ciclo while...

    Não percebi porque não consegui com o for, e gostava que me ajudassem...

    O algoritmo com o for que eu fiz era algo tipo isto

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

    main(void)
    {
    int p,i,n;


    clrscr();
    printf("Numero:");
    scanf("%d",&n);
    p=0;
    for (i=1 ; =n ; i=i+1)
    {
    if (n % i)==0)
    {
    p=p+1;
    }
    }
    if (p==2)
    {
    printf("N£mero primo");
    }
    else printf("NÆo primo");
    getch();
    return(0);
    }

    Não está testado.. alguem sabe o que tenho mal?!
     
    Última edição: 24 de Setembro de 2007
  2. OubeLa

    OubeLa Power Member

    tipo, vê lá o que está no ciclo for

    for (i=1 ; >=n ; i=i+1)

    Não deveria ser

    for (int i = 1; i >= n; i++)

    Atenção, eu não sei C, apenas sei C++, por isso pode ser por eu não conhecer a sintaxe.
     
  3. Xikinho90

    Xikinho90 Power Member

    o maior foi um erro, pois apenas troquei de while para for e deixei o >...

    quanto ao int amanha experimento pode ser dai, mas acho que já usei o ciclo for sem esse int..

    o i++ é igual ao i=i+1, apenas uma abreviação que se ussa nesta linguagem..

    amanha vejo isto agora tenho de me deitar.. =)
     
  4. LastCaress

    LastCaress Power Member

    Eu não percebo nada de programação, mas não ficaria mais rápido se em vez do equivalente ao i=i+1 fizesses i=i+2, de modo a saltar os números pares?
     
  5. blueomega

    blueomega Power Member

    e quem diz pares diz outros

    uma das maneiras que acho mais simples e

    crivo de eratosthenes
    http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
     
  6. LastCaress

    LastCaress Power Member

    Eu lembro-me de fazer um programa em basic que escrevia para um ficheiro todos os números primos :P Basicamente ele pegava na lista e testava o número+1 com todos os primos previamente descobertos :D
     
  7. Xikinho90

    Xikinho90 Power Member

    Eu sei que existem várias maneira, este programa nem está completo... porque não deveria permitir a introdução do um, entre outras coisas..

    O que me importa é que ele não dá e eu não percebo porque...


    Não percebi essa de saltar o número par, se o user introduzir um par ele vai saltar os impares....
     
  8. _kossak_

    _kossak_ Power Member

    tens um erro de sintaxe do for for
    Código:
    (i=1 ; =n ; i=i+1)
    devia ser
    Código:
    (i=1 ; i=n ; i=i+1)
    já te tinham dito isto
     
  9. Xikinho90

    Xikinho90 Power Member

    ya, já tinha reparado, isto foi feito a pressa, mas acho que descobri o erro, acho que quando se define uma condição tem de se meter dois ==...

    vou tentar hoje a noite quando voltar ao pc..=)
     
  10. Baderous

    Baderous Banido

    Código:
    #include <stdio.h>
    #include <conio.h>
    main(void) {
               int p=0,i,n;
               clrscr();
               printf("Numero:");
               scanf("%d",&n);
               for (i=1 ; [B]i<=n[/B] ; i=i+1) {
                   if [B]((n%i)==0) [/B]
                         p=p+1;
     
               }
               if (p==2)
                  printf("N£mero primo");
               else 
                    printf("NÆo primo");
               getch();
               return(0);
    }
    Apenas corrigi os erros que apareciam e acho que já está a funcionar.
     
    Última edição: 24 de Setembro de 2007
  11. Aparicio

    Aparicio /dev/mod
    Staff Member

    Além de ser inútil dividir por números pares como já disseram, também basta dividir apenas até à raiz quadrada do número que se está a testar.

    Código:
    for (i=1 ; i*i<n ; i=i+2)
    
     
  12. Xikinho90

    Xikinho90 Power Member

    Pá mas se o user introduzir 2 tu vais estar a saltar os ímpares, claro que podes verificar se é par ou não, mas para já não vou estar com isso... essa do quadrado não conhecia, mas o objectivo do algoritmo não era a perfeição, eu apenas me estou a adaptar a uma nova linguagem, e ando a fazer alguns algoritmos noobs...

    Já agora obrigado pelas ajuda, eu já me adaptei ao ciclo for, já me explicaram porque é que não dava.. faltava o < antes do =, e ele em vez de verificar a condição atribuía o valor a variável.. =) obrigado pela ajuda
     
  13. Aparicio

    Aparicio /dev/mod
    Staff Member


    Não, o ciclo for vai sempre começar sempre em 1.
    for (i=1 ; i*i<n ; i=i+2)
    Os divisores podem saltar os números pares independentemente do números introduzido.
     
  14. Rui_Carlos

    Rui_Carlos 1st Folding then Sex

    Isto é mais uma função para contar divisores do que um teste de primalidade...

    Por acaso até vai dar o resultado certo nessa situação...
     
  15. OubeLa

    OubeLa Power Member

    Ok, não tinha reparado que já tinhas declarado o i como int. Se queres usar o int fora do ciclo for fizeste bem em declarar a variavel globalmente, se não podes declarar a variavel localmente.
     
  16. SiR_vIRciado

    SiR_vIRciado What is folding?

    O 1 é considerado numero primo??
     

Partilhar esta Página