Ir ao conteúdo

Posts recomendados

Postado

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;
}

 

Postado

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

Postado

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> 

 

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!