Ir para conteúdo

POWERED BY:

Arquivado

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

TAAnnGGAAuunnnn

Achar numeros primos em C

Recommended Posts

Gente tou começando o curso de analise de sistemas e jah tenhu um dever pa casa que naum estou conseguindo fazer, sei que poder ser basico mais eu naum sei, num consigo fazer a logica.

 

Eis o problema

 

Faça um programa em linguagem C que receba n numeros naturais entre 1 e 100 e exiba todos os valores primos.

 

 

 

Sei que enho que ter um for.. e tal....mais na conta dos primos naum imagino como seja

 

 

Obrigado pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

A parte do C que me confunde é o calculo para achar numero primos.

Sei que numero primos é aquele que tem apenas dois divisores, o um e ele mesmo.

 

fiz isso pela explicação do meu professor mais naum roda...

 

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

   int n, num, k, primo;

   for (n=1;n<=100;n++){
       scanf("%d",&num);
       printf("1 ao 100 quem é primo");

       for(k=2; k<=(int)(num/2); k++){
                if((num%k)==0){
                printf("não primo");
                break;
                }

       }

   }
   if(primo==0){
   printf("n%d é primo", num);
   }


}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Eu fiz um programa desses quando estava começando em C. Você tem que fazer o seguinte:

 

Divida o número que quer testar por números sucessivos a partir do 2 (o 1 não conta, já que todo número inteiro é divisível por 1), até a metade inteira do número. Se dividir por um número maior que a metade, não vai adiantar, já que o resto vai ser decimal. Se o resto for 0, então o número não é primo. Se nenhum desses números pelo qual dividir o número que quer testar der resultado inteiro, o número é primo.

 

Por exemplo: o número 13 e o número 15:

 

Temos que dividr 13 até sua metade inteira, que é 6 (na verdade, 6,5, mas arredondamos para baixo pois 7 já é maior que sua metade).

Dividir 13 por 2: não deu 0.

Dividir 13 por 3: não deu 0.

Dividir 13 por 4: não deu 0.

Dividir 13 por 5: não deu 0.

Dividir 13 por 6: não deu 0.

Chegamos à sua metade. Parar por aqui.

Como nenhum número teve resto 0, o número é primo.

 

Temos que dividir 15 até sua metade inteira, que é 7.

Dividir 15 por 2: não deu 0.

Dividir 15 por 3: deu 0.

Opa, deu 0, parar por aqui, já que não é primo.

 

Observe que se dividíssimos 15 por 5, também teríamos resto 0, por isso também chegaríamos à conclusão de que o número não é primo. Mas, como já chegamos à essa conclusão com o número 3, que é menor, não faz sentido continuar e gastar mais tempo fazendo coisas inúteis.

 

Aí é só implementar isso. Mas você talvez se pergunte: como descubro o resto da divisão? Utilize o operador %.

 

Enquanto o operador / é utilizado para expressar o resultado de uma divisão, o operador % é utilizado para expressar o resto de uma divisão.

 

 

Então, você pode fazer algo como o seguinte para ver o resto de um número:

int x = 45;
if( (x % 6) != 0 )
   printf("45 não é divisível por 6.");

 

 

Agora, adapte isso para um for que testa qualquer número que for inserido. O bom desse algoritmo é que não precisa ser entre 1 e 100, qualquer número natural que você possa imaginar (dentro dos limites de um int) pode ser testado por essa fórmula. Mas lembre-se que quanto maior o número, mais se demora para calcular. Uma vez eu fiz um programa que ficou calculando por 30 minutos os números primos entre 0 e 0xFFFFFFFF (converta para decimal para saber o valor, não lembro de cor...) heheh

 

Qualquer dúvida sua é só perguntar.

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

gente foi o mais proximo que eu cheguei...o unico problema que so aparece o numero 3 de primo...os outros naum aparecem...tah faltando um printf em algum lugar...um help....

 

 

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{

   int indx, indx1, n=1;

   for (indx=1;indx<=100;indx++){
        n++;


       for(indx1=2; indx1<=(int)(n/2); indx1++){
                if((n%indx1)==0){
                printf("\n%i not primo", n);
                break;
                }


       }

       if((n%indx1)==1){
                printf("\n%i numero primo", n);
       }
   }
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

O (n%indx1) não tem que ser igual a um, mas sim diferente de zero, pois, por exemplo, se você dividir 8 por 3, o resto vai ser 2. O resto pode variar. Assim, tente o seguinte:

 

if( (n % indx1) != 0 ) {
   printf("\n%i numero primo", n);
}

 

 

Veja se funciona...

 

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.