Jump to content
Sign in to follow this  
Psycop

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

Recommended Posts

Psycop

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

Share this post


Link to post
Share on other sites
Baderous

Um número N é primo se não possuir nenhum divisor no intervalo [2,sqrt(N)].

sqrt(N) = raíz quadrada de N.

Share this post


Link to post
Share on other sites
Psycop

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!

Share this post


Link to post
Share on other sites
Baderous

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.

Share this post


Link to post
Share on other sites
Psycop

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

Share this post


Link to post
Share on other sites
Localhost

Esse código está confuso e com muitas erros ao nível de sintaxe/implementação. Recomeça e segue o que o @Baderous disse.


here since 2009

Share this post


Link to post
Share on other sites
gazela

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 :P

Share this post


Link to post
Share on other sites

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
Sign in to follow this  

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