Ir ao conteúdo
  • Cadastre-se

C++ Erro em algoritmo de nº primos


Marcosrcgq

Posts recomendados

Boa tarde, estou no 1º periodo do curso de ciencias da computação e aprendendo linguagem C++, trabalhando apenas com a biblioteca iostrem, nunca usei scanf e printf.

Fiz esse algoritmo para ler numeros primos mas ele está imprimindo na tela todos os numeros do intervalo selecionado e considerando todos como primos.
O objetivo é imprimir na tela apenas os nº primos do intervalo selecionado, podem me ajudar, n consigo encontrar o(s) erro(s). Obrigado.

/*
Algoritmo para ler os números primos em um determinado intervalo de números.
*/

#include <iostream>
#include <cstdlib>
#include <locale>

using namespace std;

    int main ()
        {
            setlocale (LC_ALL, "Portuguese");
            int a, n, k, primo;
            cout << "Este programa lerá os números primos a partir do 2.\n";
            cout << "Digite o número máximo a ser lido pelo programa: ";
            cin >> a;            
            for (n= 2;n<=a;n++)
                {
                    primo= 0;
                    for (k= 1;k<=n;k++)
                        {
                            if (n%k==0)
                                {
                                    primo++;
                                }                                                            
                            if (primo>2)
                                {
                                    // não faz nada.
                                }
                            else
                                {
                                    cout << n << " é nº primo.\n\n";
                                }                                                                                                                                                                        
                        }
                }
            system ("pause");
            return 0;    
        }

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @Marcosrcgq.

 

1) NOMENCLATURA DE VARIÁVEIS

Para que a variável primo serve no seu algoritmo? serve para "contabilizar a quantidade de divisores do n", ou seja, ao final das operações, primo terá o número de divisores de n. Resumindo: o termo "primo" não combina com a sua finalidade. Poderia chamar de "qtdDivisores", "numDivisores"... etc.

 

 

 

2) ESTRUTURA DE SELEÇÃO

1 hora atrás, Marcosrcgq disse:

if (primo>2)
{
// não faz nada.
}

 

Verificar algo para não fazer nada não tem sentido... simplesmente não verifique!

 

Se você quer os que "não tem mais de 2 divisores", poderia fazer assim:

        if (not (primo>2)) {
            cout << n << " é nº primo.\n\n";
        }

ou

        if (primo<=2)) {
            cout << n << " é nº primo.\n\n";
        }

Ou mais precisamente, na definição formal de "primos":

        if (primo==2)) {
            cout << n << " é nº primo.\n\n";
        }

Ou seja, um número é primo quanto tem exatamente 2 divisores.

 

 

Obs.: lembrando de trocar o nome dessa variável primo... não está coerente com o contexto.

 

 

 

3) SOBRE VERIFICAÇÃO

2 horas atrás, Marcosrcgq disse:

Fiz esse algoritmo para ler numeros primos mas ele está imprimindo na tela todos os numeros do intervalo selecionado e considerando todos como primos.

 

O resultado deve ser verificado após contar a quantidade de divisores. Você deixou junto (é fora do segundo for).

 

 

 

***

 

No aguardo.

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