Pessoal, estou tentando fazer um programinha banal aqui, mas estou tendo dificuldades em implementá-lo.
O problema é verificar se um número p é primo ou não (como não consigo fazer isso ? :shock:).
Informo um número p via Scanner e faço um loop for para receber o resto da divisão de p por i (o contador do loop) que varia de 2 até p (tá, eu sei, pode ser a té a metade de p).
Mas para qualquer número p que informo o programa dá uma mensagem dizendo que o número é primo, por exemplo, ele informa que o 9 é primo.
Acredito que o problema esteja em saber usar o operador resto (%). Alguém pode dar uma luz, por favor ?
O código está logo abaixo:
package Lista_01;
import java.util.Scanner; // Programa utiliza a classe Scanner
public class Primo
{
public static void main(String[] args)
{
// Cria Scanner para obter entrada a partir da janela de comando
Scanner input = new Scanner (System.in);
// Declaração de variáveis
int p;
float num;
int i;
boolean result;
// Inicialização da variável boleana result
result = true;
// Pede para que seja informado o número p a ser verificado se é primo
System.out.println("Informe o número p a ser virificado");
// Utiliza a classe Scanner para a entrada do número p
p = input.nextInt();
// Varre a variável i de p até 2 para verificar se a divisão
// de p pelo número i resulta em um resto inteiro.
// Se o número n dividido por i tiver resto igual a zero,
// atribui false à variável result e para a execução do loop.
for(i=2;i<=p;i++)
{
num = p%i;
if (num == 0)
{
result = false;
break;
}
}
// Se a result for true, o número n será primo. Com isso imprime
// mensagem de que o número n é primo. Caso contrário imprime
// mensagem dizendo que não é primo.
if (result = true)
{
System.out.println("O número "+ p +" é primo");
}
else
{
System.out.println("O número "+ p + " Não é primo");
}
}
}
Desde já agradeço a ajuda.
O problema é o :
if (result = true)
Que deveria ser:
if (result == true)
Sempre vai ser verdadeiro a primeira pois sempre vai ser possível atribuir ‘true’ a ele.
Tem outro problema: Pelo seu loop, ele vai dividir o número de 2 até ‘p’ (inclusive) e vai ser óbvio que ele vai ser divisível por ele mesmo e seu código vai sempre definir como não primo. Mude isso só para até menor do que ‘p’. E para descobrir se o número é primo ou não, você não precisa iterar até a metade do número e sim até sua raiz quadrada.
Até!
Maquiavelbona, você parece ser meu anjo da guarda
Sempre me ajuda por aqui, hehehe !
Bem, muitíssimo obrigado mais uma vez pela ajuda. Não me conformo pelos erros mais uma vez. E estou puto da cara em ter que fazer esses exercícios, já estou estudando a conexão com banco de dados, estudei Java nas férias, e agora o professor vem com as listas de exercícios para se fazer essas coisas ! :x
Bem, o problema é que não entendi quando você disse que sempre será possível atribuir true à variável result. Por que se eu estou atribuindo false dentro do loop ?
E por que não posso iterar o loop até p se eu estou interrompendo sua execução para o primeiro valor false encontrado com o comendo break ?
Se puder ter um pouco mais de paciência e responder essas duas dúvidas, eu agradeceria !
De qualquer forma, muito obrigado mais uma vez.
Valder,
Quanto à questão de atribuir o valor true à variável result, também não entendi. Agora, quanto à questão do LOOP, se você deixar for (i=2; i <=p; i++), você fará SEMPRE a seguinte operação:
num = p%p;
Isso sempre dará resto zero… Você tem que alterar o loop para
for (i = 2; i < p; i++)
espero ter ajudado, abraços
Quanto a variável receber ‘true’, se deve ao retorno de uma atribuição. Quando fazes isso:
if(result=true)
A Jvm pensa assim:
result=true;
if(result)
Isso é só para lembrar que as atribuições tem retorno o valor atríbuído ( ou mais precisamente a mesma varíavel mas depois de receber o valor ) e não ‘null’.
Isso não aconteceria se tivesse:
if(result==true)
Até!
Valçeu aí, Thundercas e maquiavelbona. Esse fpórum aqui é demais, muito obrigado, pessoal. Se precisarem de aulas de matemática ou física, estou a posto :lol:
Eu sempre recomendo esse fórum para meus colegas de fazuldade, mas eles não entram. Azar o deles.
[quote=Valder Olmo Corrêa]Valçeu aí, Thundercas e maquiavelbona. Esse fpórum aqui é demais, muito obrigado, pessoal. Se precisarem de aulas de matemática ou física, estou a posto :lol:
Eu sempre recomendo esse fórum para meus colegas de fazuldade, mas eles não entram. Azar o deles.[/quote]
Não ofereça porque vai que aceitamos. Já estou vendo minhas notas vermelhas nas primeiras provas de Álgebra I e Cálculo I.
Até!