Jump to content

primeiros 100 numeros primos


costricardo
 Share

Recommended Posts

Boas pessoal,

Queria fazer um programa que me imprimisse para a tela os primeiros 100 numeros primos.

Eu vejo se um numero é primo da seguinte maneira:

int num,i,conta=0;

scanf(" %d", &num);

for(i=1;i<=num;i++) {

if(num%i==0) conta++;

}

if(conta==2) printf("Primo");

else("Nao primo");

--------------------

Agora começei a fazer o de imprimir os primeros 100 numeros, mas empanquei aqui:

int num, i,j, conta=0;

for(j=1;j<=100;j++) {

  for(i=1;i<=100;i++) {

    if(j%i==0) conta++;

    }

    if(conta==2) printf(" %d", conta);

}

I´m a Geek and you?www.tecnologias.in

Link to comment
Share on other sites

tentei fazer esse algoritmo mas nao consegui, e entao resolvi tentr de outra maneira:

 int num, i,j, conta=0, aux=0,n;



    scanf(" %d", &num);

    j=num;


    while(j>0) {

    for(i=1; i<=num; i++) {
        if(num%i==0) {

        conta++;

        }

    }
        if(conta==2) { printf(" %d", num);}

j--;

    }

se um numero é divisivel so 2 vezes (Conta==2) ele imprime o numero.  eu fiz um ciclo while para decrementar o numero, ou seja, se o numero for 30 ele ve se é primo e imprime e depois decrementa e volta a fazer o teste ate o numero ser 0.

Mas não funciona :X

I´m a Geek and you?www.tecnologias.in

Link to comment
Share on other sites

tentei fazer esse algoritmo mas nao consegui, e entao resolvi tentr de outra maneira:

int num, i,j, conta=0, aux=0,n;

    scanf(" %d", &num);

    j=num;

    while(j>0) {

    for(i=1; i<=num; i++) {

        if(num%i==0) {

        conta++;

        }

    }

        if(conta==2) { printf(" %d", num);}

j--;

    }

se um numero é divisivel so 2 vezes (Conta==2) ele imprime o numero.  eu fiz um ciclo while para decrementar o numero, ou seja, se o numero for 30 ele ve se é primo e imprime e depois decrementa e volta a fazer o teste ate o numero ser 0.

Mas não funciona :X

Tens de fazer conta=0 antes do ciclo while ...

Da forma que estás a fazer, só detectas o primeiro número primo.

No entanto, aconselho-te a veres o link que o Baderous deu, e também a pesquisares sobre números primos neste fórum, visto que houveram algumas discussões acerca deste tópico, e apresentados alguns exemplos do crivo de erastótenes.

PS: Tenta usar as tags code.

Link to comment
Share on other sites

Já agora, podes fazer isso pela maneira trivial: fazes um loop de 1...100 e em cada iteração verificas se o número que está a ser iterado é primo. Para isso podes criar uma função que recebe como argumento o número que está a ser iterado e que te retorna se o número é primo ou não.

A ideia do loop:

for ( i = 1; i <= 100; i++ ) if ( isPrime (i) ) printf ("%i é primo\n", i);

here since 2009

Link to comment
Share on other sites

# include <stdio.h>

# include <stdlib.h>

int main (void)

{

int num, conta=0,i,j;

for(j=1; j<=100;j++) {

if(primo(j)) {

   

    printf(" %d e primo", j);

}

}

return 0;

}

void primo(int num, int conta)

{

    int i;

    conta=0;

    for(i=1; i<=num; i++) {

        if(num%i==0)  conta++;

    }if(conta==2) {

  printf(" %d", num);

    }

}

Fiz isto, o meu problema agora é que o meu programa ao testar se é primo so imprime o numero. Além disso está me a imprimir os numeros todos ate 100 :/

I´m a Geek and you?www.tecnologias.in

Link to comment
Share on other sites

Já te pediram que utilizasses as tags code. Exemplo de uso: [ code = c ] código aqui [ /code ], sem os espaços, é claro.

Quanto ao código o problema está na função que te retorna se um número é primo ou não. Tenta fazer isto, se o número for primo retorna 1 da função, se o número não for primo retorna 0. No loop chamas essa função e verificas se o retorno é 1, se o for é primo, caso contrário não é primo. Para isto vais ter de mudar a definição do cabeçalho para:

int isPrime (int n)

here since 2009

Link to comment
Share on other sites

Já consegui, Obrigado pela ajuda  😛

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

int main ()
{

  int num,j, valor1;

    printf("Numeros primos ate que valor: ");scanf(" %d", &valor1);

   for(j=0; j<=valor1; j++) {
    if(primo(j)==1) {
       printf(" %d", j);
}


}

}


int primo(int num, int conta)
{
    int i;
    conta=0;


    for(i=1; i<=num; i++) {
        if(num%i==0)  conta++;


    }if(conta==2) {
   return 1; // retorna um se primo
    } else {

    return 0;
    }




} 

I´m a Geek and you?www.tecnologias.in

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.