Jump to content

Problema com aplicação para verificação de números Primos


Recommended Posts

Posted

Ando a tentar construir uma pequena aplicação que faça a verificação de um numero primo.

Mas estou com alguns problemas em conseguir o resultado pretendido, e penso que o problema esteja no raciocínio lógico.

O Código ao qual cheguei foi o seguinte:

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    int num;
    int res;
    int div;
    
    cout << "Insira um Numero: " << endl;
    cin >> num;
    
    for (div = -1; div <= 2; div++)
    res = num & div;
    cout << res << endl;
    
    //Verificando se é Numero Primo
    {
                 
               if (num = 1 && res == 0)
                       cout << "O Numero Inserido Não é Primo" << endl;
    
               else if(res == 0)
                             cout << "O Numero Inserido é Primo" << endl;
               
               else if(res != 0)
                      cout << "O Numero Inserido Não é Primo" << endl;
                      
               
                             
    }
    
    cin.get();
    cin.get();
    
    return 0;
}

Sei que o problema esta na definição das condições.

Alguém me pode descrever, todas as condições necessárias para que seja ou não validado um número primo? Não Quero código, quero apenas ajuda para definir as condições!

Cumps

Posted

Eu Estou completamente baralhado em relação às condições a definir para a verificação de ser ou não numero primo.

Sei que é um questão de iniciante, mas o meu problema actual não é a criação do código, mas sim o "algoritmo" e a lógica que permitem definir um conjunto de condições pelas quais num numero passa e onde é verificado se é ou não um numero primo!

Posted

1 - Lês o número N;

2 - Inicias um ciclo a começar em 2 e a ir até sqrt(N);

3 - Em cada iteração verificas se o valor é divisor de N;

3.1 - Se for interrompes o ciclo pois não é primo;

3.2 - Se não for, continuas.

4 - Se chegar ao fim do ciclo, então N é primo.

Para gerar a interrupção no ciclo podes ter uma variável auxiliar que mude o valor quando detectar um divisor, sendo o valor usado sempre na verificação da condição de paragem do ciclo.

Posted

Eu tentei solucionar o problema de outra forma, mas mesmo assim ainda continuo com problemas.

Cheguei ao seguinte:

Tentei Implementar isso no código e cheguei ao seguinte:

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    int num;
    int div;
    
    cout << "Insira um Numero: " << endl;
    cin >> num;
    
    for(div == num-1; div > 1; div--)    
    
    if (num = 1 && num % div == 0)
    cout << "O Numero não é Primo" << endl;
    
    else if (num % div == 0)
    cout << "O Numero não é Primo" << endl;
    
    else if (num % div != 0 )
    cout << "O Numero é Primo" << endl;
    
                         

    cin.get();
    cin.get();
    
    return 0;
}

EDIT:

Cheguei a Este novo pedaço de Código:

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    int num;
    int div;
    
    cout << "Insira um Numero: " << endl;
    cin >> num;
    {
    for(div == num-1; div > 1; div--)
    
    if (num % div == 0)
    cout << "O Numero não é Primo" << endl;
    
    if (num % div != 0 )
    cout << "O Numero é Primo" << endl;
   
    }
    
    cin.get();
    cin.get();
    
    return 0;
}

Mas isto continua a apresentar problemas.

O meu problema agora ainda reside na verificação, e no ciclo que criei que não para!.

Cumps

  • 3 weeks later...
Posted

Também já fiz um problema como esse e cheguei a esta solução:

#include <iostream>

using namespace std;

int main()

{

int num, nao_primo=0, divisoes=0, i;

cout << "Digite um numero inteiro: ";

cin >> num;

if ((num == 1) || (num % 2 == 0) && (num != 2))

nao_primo = 1;

else                   

for (i = 1; (i <= num) && (divisoes <= 2); i += 2)

{

if (num % i == 0)

divisoes++;

}     

if ((nao_primo == 0) && (divisoes <= 2))

cout << "O numero " << num << " é primo!\n";

else

cout << "O numero " << num << " não é primo!\n";

return 0;

}

Basicamente isto faz:

vê se o número inserido é igual a 1 ou se é diferente de 2 e o resto da divisão por 2 dá 0 (ou seja, não é primo), se algum deles for verdade entao a variável "não_primo" passa a ser 1,

                    se não vai correr o ciclo, enquanto "i" for menor que o numero e o numero de divisoes for inferior a 2, ele vê se o resto da divisao do numero por "i" dá 0, se der aumenta o nº das divisoes, se não der continua com o ciclo (em cada iteração aumenta "i" em 2 valores).

No fim vê se a variável não_primo continua 0 e se o número de divisões é menor que 2, se isso se verificar entao apresenta a mensagem a dizer que é primo, se nao diz que não é primo.

Está um pouco confuso a explicação, mas se não perceberes alguma coisa diz 😛

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.