Número primos em C

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:
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.
 
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.

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.. =)
 
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?
 
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
 
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....
 
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

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..=)
 
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:
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)
 
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
 
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...


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.
 
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.. =)

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.
 
Back
Topo