Ir ao conteúdo
  • Cadastre-se

Numeros primos


tiagofraco

Posts recomendados

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.

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
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.

Link para o comentário
Compartilhar em outros sites

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 ();

}

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
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.

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

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!