Números Primos em Linguagem C

Se alguém conseguir me ajudar serei muito grato…

Minha Professora passou um algoritmo assim…

Faça um programa em Linguagem C, que peça para o usuário um número, e depois peça um total de numeros primos que queira que apareça na tela…

Se não ficou claro aqui esta um Borrão…

Digite um numero qualquer: (Exemplo: “5”)
Digite o total de numeros primos que queira aparecer:(“4”)

(No final deve aparecer):

5,7,11,13

(Não nessecita fazer rodar novamente o programa :P)

Somente isso só que ainda ninguém da sala conseguiu fazer…:frowning:

Agradeço desde já…
thx

Hum, por acaso você já ouviu falar do Crivo de Eratóstenes? Vocês já aprenderam a usar arrays?

Hum…
Bem interessante…

E o link já tem o codigo em java pronto, e passar para C
será trivial…

Respondendo…

thingol…

li sobre o Crivo de Eratóstenes, mas ainda to pensando como irei fazer isso no codigo fonte…
e sobre arrays ainda não aprendi… estou no comecinho da linguagem C… :frowning: (Calouro na Universidade:P)

KassiPretti…
li sobre o Crivo de Eratóstenes nesse seu link, obrigado, mas ainda não sei converter linguagem Java para linguagem C… :frowning:

Se alguem poder ajudar um pokinho mais agradeço…

Escreva os passos do programa no papel e veja se isso te ajuda.

Primeira coisa: como você sabe se um número é primo?

Já que vocês não podem usar arrays porque ainda não aprenderam (argh, como seria a vida sem arrays? ), então vocês têm de determinar se um número é primo pelo método da força bruta, ou seja, ir dividindo o número por todos os números que estão abaixo dele, até que chegue ao próprio número ou então ache um número que deixe resto zero.

Para achar o resto, você tem de procurar no seu livro de linguagem C e vai ver que existe o operador % (que não calcula porcentagens, como parece, mas acha o resto. ) Por exemplo: 10 % 5 dá resto 0, 10 % 3 dá resto 1.
Para ir dividindo o número por todos os números que estão abaixo dele, a partir do número 2, você precisa de um “for”. Já aprendeu a usar “for”? Se o professor não ensinou, você tem de procurar no seu livro.

E de modo geral: em programação, você tem sempre de “tirar a bunda da cadeira e procurar uma solução”. As coisas não vêm prontas, e infelizmente muitas delas estão em inglês.
Se a apostila que você tem é muito ruim (por exemplo, não ensina as coisas, ou tem muitos erros), vá a um sebo ou à biblioteca da sua escola e ache um livro.
Em português acho que existe aqueles livros da Victorine Viviane Mizrahi, que se chamam “Treinamento em Linguagem C”. Não sei se são bons, porque aprendi C há quase 25 anos atrás, e nunca li esse livro. Mas como é usado em várias escolas, deve ser fácil de achar em bibliotecas de escolas ou em sebos.

respondendo…

thingol

Sua explicação ficou bem clara…
Agradeço…

for ja aprendi…
% também…

Minha Professora ensinou a usar tudo isso…
Como estou tendo algumas provas durante a semana…
Vou fazer o programinha no FDS…
Ja entendi a lógica…
Agora o serviço é meu :stuck_out_tongue:

thx

thingol se vc quiser me add para eu perguntar umas coisas de programação add se vc tiver Msn
j_jef_hilux@hotmail.com

:smiley: Minha primeira contribuição…
Usando função…

#include <stdio.h>

int verifica_primos(int numero)
{
    int numero_verificador;    //numero que agira como contador. Ira de 1 até o numero a ser pesquisado
    int multiplo;               //variavel que recebera a soma dos multiplos

                                /*Vamos inicializar a variavel aqui para que ela nao continue somando os */
                                /*    multiplos ao verificar outro numero */
    multiplo = 0;
    for (numero_verificador = 2; numero_verificador < numero; numero_verificador++){
        if ((numero % numero_verificador) == 0){
            multiplo == multiplo + numero_verificador;
        }
    }

    if(multiplo ==(numero + 1)
     {
        return(1);
     }
     else
     {
        return(0);
     }

}

int verifica_primos_epc(int numero){
    int numero_verificador;    //numero que agira como contador. Ira de 1 até o numero a ser pesquisado
    int ehPrimo = 1;               //variavel que recebera a soma dos multiplos

                                /*Vamos inicializar a variavel aqui para que ela nao continue somando os */
                                /*    multiplos ao verificar outro numero */
    for (numero_verificador = 2; numero_verificador < numero; numero_verificador++){
        if ((numero % numero_verificador) == 0){
            ehPrimo == 0;
        }
    }

    return ehPrimo;
}


void main(){
    int primo, contador, numeral;

    primo = 0;
    contador = 0;

    while(contador <= 25){    /* O 25, ele ira verificar 25 numeros. que o usuario ira digitar  */
       printf("Informe algum numero para ser verificado: \n");
       scanf("%i",&numeral);

       primo = verifica_primos(numeral);

       if (primo){
            printf("O numero %d é primo.\n", numeral);
       }
       else{
            printf("O numero %d não é primo.\n",numeral);
       }

        ++contador;
    }
}

[quote=bossanova] :smiley: Minha primeira contribuição…
Usando função…

#include <stdio.h>

int verifica_primos(int numero)
{
int numero_verificador; //numero que agira como contador. Ira de 1 até o numero a ser pesquisado
int multiplo; //variavel que recebera a soma dos multiplos

                            /*Vamos inicializar a variavel aqui para que ela nao continue somando os */
                            /*    multiplos ao verificar outro numero */
multiplo = 0;
for (numero_verificador = 2; numero_verificador < numero; numero_verificador++){
    if ((numero % numero_verificador) == 0){
        multiplo == multiplo + numero_verificador;
    }
}

if(multiplo ==(numero + 1)
 {
    return(1);
 }
 else
 {
    return(0);
 }

}

int verifica_primos_epc(int numero){
int numero_verificador; //numero que agira como contador. Ira de 1 até o numero a ser pesquisado
int ehPrimo = 1; //variavel que recebera a soma dos multiplos

                            /*Vamos inicializar a variavel aqui para que ela nao continue somando os */
                            /*    multiplos ao verificar outro numero */
for (numero_verificador = 2; numero_verificador < numero; numero_verificador++){
    if ((numero % numero_verificador) == 0){
        ehPrimo == 0;
    }
}

return ehPrimo;

}

void main(){
int primo, contador, numeral;

primo = 0;
contador = 0;

while(contador <= 25){    /* O 25, ele ira verificar 25 numeros. que o usuario ira digitar  */
   printf("Informe algum numero para ser verificado: \n");
   scanf("%i",&numeral);

   primo = verifica_primos(numeral);

   if (primo){
        printf("O numero %d é primo.\n", numeral);
   }
   else{
        printf("O numero %d não é primo.\n",numeral);
   }

    ++contador;
}

}
[/quote]

Em C não existe função do tipo “void”.
Sempre algo tem que retornar alguma coisa, acho.

Se estou errado, por favor, me corrijam.

EDITANDO:
Fui pesquisar e descobri que existe. :oops:

Bem-vindo ao fórum. Algumas dicas para as próximas contribuições:

  1. Use a tag code. Isso deixa o código colorido e formatado:
    [code]
    seu código aqui
    [/code]

(você pode só selecionar o código e pressionar o botão code, da barra)

  1. Evite ressuscitar tópicos muito antigos, esse aqui era de 2008.

Boas postagens. :slight_smile:

Pessoal, boa noite…
Sou estudante novato em C++ e gostaria de saber se alguém podem me ajudar a identificar por qual motivo após eu entrar com números maiores de 128 a função não retorna nada…

#include
using namespace std;
void primo(char x);

void main()
{
int num;
cout << “Entre com um numero para saber se eh primo e pressione ENTER:\n”;
cin >> num;
primo(num);
}

void primo(char x)
{
int cont;
for(cont=2;cont <=x;cont++)
{
if(x%cont==0 && cont < x)
{
cout << “Nao eh primo\n”;
return;
}
else
{
cout << “Eh primo\n”;
return;
}
}

}

A entrada da função primo é um char.

Um char é uma variável que vai de -127 até 128.
Portanto, se você fornece um número > 128, ele acaba se tornando negativo.

Para corrigir, troque:

Por:

Preste atenção aos warnings gerados pelo compilador. Provavelmente ele avisou que estava havendo perda de precisão na chamada do método primo.

Outra coisa:
a) Crie seus próprios tópicos. Sua dúvida não tinha pouco a ver com a dúvida inicial desse tópico;
b) Ao postar códigos, por favor, use a tag code, como descrito aqui: http://www.guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor