Psycop Posted February 14, 2011 at 02:21 AM Report #368852 Posted February 14, 2011 at 02:21 AM 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
Baderous Posted February 14, 2011 at 09:50 AM Report #368864 Posted February 14, 2011 at 09:50 AM Um número N é primo se não possuir nenhum divisor no intervalo [2,sqrt(N)]. sqrt(N) = raíz quadrada de N.
Psycop Posted February 14, 2011 at 02:18 PM Author Report #368901 Posted February 14, 2011 at 02:18 PM 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!
Baderous Posted February 14, 2011 at 03:06 PM Report #368913 Posted February 14, 2011 at 03:06 PM 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.
Psycop Posted February 14, 2011 at 03:26 PM Author Report #368915 Posted February 14, 2011 at 03:26 PM 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
Localhost Posted February 16, 2011 at 10:04 PM Report #369519 Posted February 16, 2011 at 10:04 PM 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
gazela Posted March 5, 2011 at 06:43 PM Report #372934 Posted March 5, 2011 at 06:43 PM 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 😛
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now