Ir ao conteúdo
  • Cadastre-se

C++ Exercício com os numeros primos


Posts recomendados

Pessoal, comecei recentemente um curso de sistemas, e estou com dificuldade de finalizar um exercício com o números primos:

Estou fazendo, mas está com erro, quero que o programa entenda que para ser primo, deve haver apenas dois divisores. Mas não está dando certo, minha lógica tá meio truncada:

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

main ()
{
    
int i, num, qtdiv=0;

printf("Digite um numero:");
scanf("%d", &num);
    
for (i==1, i<=num, i++){
    if (num%i==0);
    qtdiv++;
    
if(qtdiv==2)
printf ("\n num eh primo %d", numero);
else 
printf("\n num nao eh primo %d", numero);

return 0;
}

 

Link para o post
Compartilhar em outros sites

Há um ponto-virgula no fim da instrução de seleção IF (num%i==0); que define resposta nula. Remova-o e depois teste.

Link para o post
Compartilhar em outros sites

É meio que óbvio... O separador na instrução de fluxo e controle de iterações FOR não é vírgula, mas, sim ponto-virgula e atribuição de valor para variável é com 1 sinal de =, 2 somente para comparação de igual.

Link para o post
Compartilhar em outros sites

Seu programa não está bom ainda :(. Há vários problemas...

 

  • nunca use uma variável global com um nominho ingênuo com `i ` por exemplo. Isso sempre cai na sua cabeça, além de ser proibido em todo lugar.
  • não declare mais que uma variável por linha. Um dia você vai ter que ler seu próprio programa. Ou eu. ;) E vai gostar de ter escrito assim.
     
for (int i=1, i<=num, i++)
{
    if (num%i==0);

 

  • Não é assim importante dividir por 1 o número, já que TODO número é divisível por 1. Pense nisso.
     
  • use nomes mais significativos. num e i não são assim um sucesso. Estaria melhor com numero e fator por exemplo.
     
  • Deve imaginar que TODO número é divisível por ele mesmo, então seu loop é, digamos, muito zeloso ao tentar dividir todo número por 1 e por ele mesmo. Sim, o módulo vai dar ZERO. Voltando ao ensino fundamental, todo número inteiro é divisível por um e por si mesmo. 
     
  • Só precisa testar até a raiz quadrada do número,  já que assim são os fatores: se a*b = x então conforme aumenta a diminui b. E o maior par seria para o caso de b = a e assim b = sqrt(x). Como o caso de 25: a - b = 5.
     
  • Considere que se um número tem um divisor além dele e da unidade:
    • ele tem não é primo
    • ele tem ao menos mais 2 além dele próprio e da unidade. Voltando ao ensino fundamental: 10 não é primo. Seu loop vai notar de 10%2 é zero. Mas depois vai testar 10%5 e ver que também é zero. E vai até testar que 10%10 é zero. Não faz diferença. Basta o 10%2 ser zero para identificar o número como não primo. Não há razão para contar os divisores porque basta UM.
       
  • declare as variável de controle do loop DENTRO do comando. desde os '80 isso é assim.
     
  • TESTE o retorno de scanf(). Não faz sentido seguir se não leu nada...

 

Usando nomes mais significativos e colocando um limite no loop pode usar algo assim

#include <stdio.h>
#include <math.h>

int main (void)
{
    int numero = 0;

    printf("Digite um numero:");
    if ( scanf("%d", &numero) != 1 ) return -1; // nao leu nada
    
    int limite = (int) sqrt( (double)numero );
    for (int fator=2; fator<=limite; fator++)
    {
        if (numero%fator==0)
        {
            printf("%d nao e primo\n", numero);
            return 0;
        };
    };  // for()
    printf("%d e PRIMO\n", numero);
    return 0;
} 

 

E deve ver algo assim

 

ch> gcc -o pri -Wall -std=c17   pri.c -lm
ch> ./pri
Digite um numero:23
23 e PRIMO
ch> ./pri
Digite um numero:12
12 nao e primo
ch> ./pri
Digite um numero:2
2 e PRIMO
ch> ./pri
Digite um numero:3
3 e PRIMO
ch> ./pri
Digite um numero:6
6 nao e primo
ch> ./pri
Digite um numero:11
11 e PRIMO
ch> ./pri
Digite um numero:123
123 nao e primo
ch> ./pri
Digite um numero:119
119 nao e primo
ch> 

 

Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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

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

Redes-Wi-Fi-capa-3d-newsletter.png

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!