Ir ao conteúdo
  • Cadastre-se

C Programa sobre primos em um intervalo A e B não roda.


Posts recomendados

Boa tarde galera, eu tô tendo programação em C na faculdade e tenho muita dificuldade no assunto. O laboratório da semana era pra implementar um programa que imprimia todos os números primos entre um intervalo inserido pelo usuário, que varia entre 1 e 10000. Alguém pode me ajudar nessa?

 

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

  int main() {

    int numero1, numero2, i, j, n = 0;

    printf("Digite dois números entre 1 e 10000: ");

    scanf("%d%d", &numero1, &numero2);

    for (i = numero1; i < numero2; i++) {
      for (j = 1; j < numero1; j++) {

        if (i % j == 0) {
          n++;
        }
      }
    }

    if (n==1) {
      printf("%d\n", n);
    }

    return 0;
  }

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Esse trecho

 

for (i = numero1; i < numero2; i++) {
      for (j = 1; j < numero1; j++) {

        if (i % j == 0) {
          n++;
        }
      }
}

 

deveria mostrar se numero1 é primo? Qual a lógica disso?

Sabe o que é um número primo?

 

sobre o código

 

  • porque escreveu um programa interativo?
  • para que ler 2 números no início do programa? Nunca escreva um programa interativo. É chato para c. pra testar e não acrescenta nada
  • declare as variáveis de controle DENTRO do for --- caso de i e j .
  • TESTE sempre o retorno de scanf(). Leu o manual?
  • porque incluiu stdlib.h e math.h?

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Opa, valeu pela resposta! Então essa parte em específico que você respondeu eu tentei olhar de outros códigos aqui no site, também não entendi. As duas variáveis no início eram pra determinar o intervalo entre A e B, que seria inserido pelo usuário. E sobre os #include, foi orientação do professor, para que não ocorra risco de não rodar por isso. 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

5 horas atrás, arfneto disse:
for (i = numero1; i < numero2; i++) {
      for (j = 1; j < numero1; j++) {

        if (i % j == 0) {
          n++;
        }
      }
}

Esta parte, pesquisei alguns códigos para ajudar e vi que talvez a melhor maneira era essa, não tinha nem ideia de como fazer esse if para ver se era primo, ai peguei essa parte de exemplo. Jurava que talvez o erro estaria ai, você pode me ajudar nessa parte?

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@khalifajota    quatro erros , no seu código ,  

for (i = numero1; i < numero2; i++) /// o numero1 pode ser maior que o numero2
{
  for (j = 1; j < numero1; j++)     /// j precisar ir até valor de  i
  {                                 /// e ir até enquanto for menor oU igual ao  i
    if (i % j == 0) 
    {
      n++;
    }
  }
}
if (n == 1)                         /// esse if deveria estar do loop i
{
  printf("%d\n", n);
}

e para o caso de ser digitado um número1 maior que numero2

if(numero1 > numero2)
{
  i       = numero1;
  numero1 = numero2;
  numero2 =       i;  /// garante que o numero1 seja menor oU igual ao numero2
}

 

Link para o comentário
Compartilhar em outros sites

Em 12/05/2022 às 21:17, khalifajota disse:

E sobre os #include [...]

 

Em 12/05/2022 às 16:23, khalifajota disse:
#include <math.h>

Há solução que utiliza a raiz do dividendo (o número a ser dividido) para reduzir a quantidade de divisões|multiplicações|iterações explicitas, sendo uma razão para importar, em específico,

math.h

sqrt(x) -- calcular a raiz quadrada de seu argumento x --

Observe

Em 12/05/2022 às 16:23, khalifajota disse:
    if (n==1) {
      printf("%d\n", n);
    }

No caso, a pergunta foi|é se n (número de divisores de x) é igual a 1, ou seja, estaria|está x fora do grupo dos números compostos ou simplesmente é primo.

Em tese:

* Se x é par x é composto.

* Se x>2 tem raiz inteira x é composto.

* Se x tem divisores entre x+1 e sua raiz ele é composto. 

Logo 

Em duas de três condições a raiz de x é útil para uma solução que corrobora na importação da biblioteca math.h 

Em 12/05/2022 às 21:17, khalifajota disse:

eu tentei olhar de outros códigos aqui no site, também não entendi.

Advirto que às vezes uma resposta não é melhor que o como responde, sendo necessário contemplar o máximo de quesitos estudado|visto|anotados|lidos|etc na aula para ter uma resposta válida, ou seja, um resultado que funciona no fórum não é garantia de resultado.

Pergunte mais sobre

Em 12/05/2022 às 21:17, khalifajota disse:

[...] foi orientação do professor, para que não ocorra risco de não rodar por isso.

Observe tuas anotações, há exemplo com uso de funções dessa biblioteca (math)? Se sim, é porque deve ser feito com elas.

  • Obrigado 1
Link para o comentário
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...