Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
tiagofraco

Numeros primos

Recommended Posts

<font color='#348781'>Numeros primos sao aqueles que só são divisiveis por 1 e por ele proprio não é? Mas pra por isso no codigo ta meio embaraçado :) Eu estava tendo fazer o valor mod 2 e se desse 1 ele seria primo mas essa equação (Fraca) não funciona porque a partir do numero 15 ele ia dar erro, o numero 15 por exemplo ia ser dito como primo... Alguem aí conhece alguma forma matemática de se descobrir se é nemero primo ou não?

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

<font color='#348781'>o melhor que eu consegui fazer ate agora é isso aí(Não funciona direito), tentem da uma melhorada aí.. minha cabeça já ta doendo:

#include <stdio.h>

main () {

 int iNum,iQuant,iPrimo2,iPrimo3,iPrimoSequencia,iVeriSequenc1,iVeriSequenc2=0;

 int iCont=1;

  printf("A partir de que valor voce quer apresentar os n§s primos?\n");

scanf("%d",&iNum);

printf("Quantos n§s primos voce quer visualizar?\n");

scanf("%d",&iQuant);

iPrimo2=(iNum%2);

iPrimo3=(iNum%3);

iPrimoSequencia=iNum;

if (iPrimo2==1 || iPrimo3==1) {

while (iCont <= iQuant){

iPrimoSequencia=iPrimoSequencia+1;

iVeriSequenc1=(iPrimoSequencia%2);

iVeriSequenc2=(iPrimoSequencia%3);

if (iVeriSequenc1==1 || iVeriSequenc2==1){

printf("Numero primo: %d\n",iPrimoSequencia);

++iCont;

}

}

}

}

OBS: O codigo é + organizado, ficou assim por causa da pagina...

Compartilhar este post


Link para o post
Compartilhar em outros sites
Guest lucca

eu tenho um programa em pascal q da pra saber se o numero é primo ou não, vê se serve pra alguma coisa..pelo algoritmo q você fez eu vi q você quer mostrar uma lista de primos...da pra por um while e mandar ver...não tenho certeza se ta muito bom, mas já é alguma coisa...não sei se tratei todos os erros...

program primo;

var

  x,n:integer;

begin

    write ('entre com o numero: ');

    readln (n);

    x:=2;

    while ((n mod x)<>0) and (n<>x) do

          x:=x+1;

    if n=x then

    writeln ('o numero ',n,' ‚ primo');

    if ((n mod x)=0) and (n<>x) then

       begin

            writeln ('o numero ',n,' não é primo');

            x:=n;

       end;

    if n=1 then

    writeln ('o numero ',n,' é primo');

end.

Espero q tenha ajudado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho q consegui fazer um prog em pascal q imprime na tela os numeros primos menores q o q você colocar...

vou hospedar num server aqui e já ponho a url.

Compartilhar este post


Link para o post
Compartilhar em outros sites

<font color='#0000FF'>cara, agora 3 indianos descobriram um forumula do numero primo, pra ver se ele é ou não, fizeram com mas de 100 algarismos... isto vai acabar com a criptografia!!! auhauaha

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado Originalmente por eduaires@08 Sep. 2002,20:57

cara, agora 3 indianos descobriram um forumula do numero primo, pra ver se ele é ou não, fizeram com mas de 100 algarismos... isto vai acabar com a criptografia!!! auhauaha

Até onde eu sei, é um método lento. O método "burro" atual era mais rápido.

O que eles fizeram não é importante para o que você pensou. É apenas uma forma mais bonita do que ficar comparando.

Se você achar um link do trabalho deles, dá um toque. Não sei aonde foi publicado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

<font color='#348781'>aí galera! Quebrei e quebrei a cabeça... e fiz a coisa funcionar.. o melhor jeito é testar o nº digitado de 1 ate ele mesmo.. e se ele mod que vai de 1 ate ele proprio for 0 so duas vezes, significa que ele é primo! :) Com excessao do 1.. porque o 1 ele so é divisivel por 1, e o nº para ser primo tem que ser divisivel por dois nº  distintos.. aí a solucao é simples, logo no 1º for é so por pra iniciar com 2! :) valeu galera pela ajuda! La vai o codigo dele aí: (Saiu pequeno) ":P

#include <stdio.h>

#include <conio.h>

main() {

 int iNumero=0,iTeste=2,iTeste2=1;

 int iCont=0;

clrscr();

printf("*********** Programa para verificar quais sao os n§s primos ****************");

printf("\n- Digite um numero: ");

scanf("%d",&iNumero);

if( iNumero <= 0 ){

printf("- O numero %d e os seus antecessores não sao considerado n§s primos.",iNumero);

}

else{

printf("- Numeros primos: ");

for(iTeste=2;iTeste<=iNumero;iTeste++){

iCont=0;

for(iTeste2=1;iTeste2<=iNumero;iTeste2++){

if((iTeste%iTeste2)==0){

++iCont;

}

}

if(iCont<3 ){

printf("%d ",iTeste);

}

}

}

getch ();

}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Guest dirso
Postado Originalmente por tiagofraco@15 Set. 2002,00:34

aí galera! Quebrei e quebrei a cabeça... e fiz a coisa funcionar.. o melhor jeito é testar o nº digitado de 1 ate ele mesmo.. e se ele mod que vai de 1 ate ele proprio for 0 so duas vezes, significa que ele é primo! :) Com excessao do 1.. porque o 1 ele so é divisivel por 1, e o nº para ser primo tem que ser divisivel por dois nº  distintos.. aí a solucao é simples, logo no 1º for é so por pra iniciar com 2! :) valeu galera pela ajuda! La vai o codigo dele aí: (Saiu pequeno) ":P

#include <stdio.h>

#include <conio.h>

main() {

 int iNumero=0,iTeste=2,iTeste2=1;

 int iCont=0;

clrscr();

printf("*********** Programa para verificar quais sao os n§s primos ****************");

printf("\n- Digite um numero: ");

scanf("%d",&iNumero);

if( iNumero <= 0 ){

  printf("- O numero %d e os seus antecessores não sao considerado n§s primos.",iNumero);

}

else{

  printf("- Numeros primos: ");

  for(iTeste=2;iTeste<=iNumero;iTeste++){

   iCont=0;

   for(iTeste2=1;iTeste2<=iNumero;iTeste2++){

     if((iTeste%iTeste2)==0){

      ++iCont;

    }

   }

   if(iCont<3 ){

    printf("%d ",iTeste);

   }

  }

}

getch ();

}

Segue um algoritmo um pouco melhor

// primeira opcao
void main(int argc, char *argv[])
{
   int bEhPrimo = 1;
   n = atoi(argv[0]);
   for (i = 2; i <= ceil(sqrt(n)) && bEhPrimo; i++)
       if((n % i) == 0)
           bEhPrimo = 0;

   if(bEhPrimo)
       printf("é primo");
   else printf("é primo");
}

Um modo ainda melhor seria dividir apenas pelos primos maiores que 1 e menores ou iguais a raiz quadrada de n.

abraços,

Dirso.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado Originalmente por dirso@21 Set. 2002,19:09

// primeira opcao
void main(int argc, char *argv[])
{
   n = atoi(argv[0]);
...
if((n % i) == 0)
...
  if(bEhPrimo)
      printf("é primo");
  else printf("é primo");

Um modo ainda melhor seria dividir apenas pelos primos maiores que 1 e menores ou iguais a raiz quadrada de n.

<font color='#000080'>Bom... apesar de não entender o porquê de ter trazido esse tópico antigo de novo (aliás, não entendi o porquê de tantos posts, já que o link que o sledgehammer postou logo no 2º post já descreve essas técnicas), só uns pequenos comentários:

argv[0] é a referência ao próprio path do programa (em alguns *nix é o comando usado para invocar o programa no shell). Chamar atoi( argv[0] ) vai sempre resultar em 0.

if((n % i) == 0) é mais elegantemente escrito como if (!(n % i))

E no fim das contas seu código sempre imprime "é primo".  :cool:

---(comentários relativos a outros posts, mas não dá prá quotar mais de um em um só post)---

Não usem "{ }" em ifs e fors de único comando, só dá mais trabalho prá escrever e ocupa mais linhas. :)

Postem os códigos usando o botão Code, senão ele perde a formatação e fica quase ilegível na página.   :;):

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×