Aloha pessoa com estão?
Pessoal estou começando a mexer com progrmação, já tenho algumas noçoes basicas de java (orientada com objetos) tenho que resolver uma pequena questão da facu e ñ estou conseguindo alguem pode me ajudar?
Tenho que solicitar um numero e informa se ele é primo ou ñ. Já li alguns topicos sobre o assunto, mas mesmo assim ñ me ficou muito claro, meu codigo esta assim…
public void Resusltado()
{
if ( numero < 2 || numero > 2 && numero%2==0){
System.out.println (“não é primo”);
}
int cont=2;
while ( cont <= numero ){
if ( numero/cont<cont && numero%cont!=0){
System.out.println (“é primo”);
}
else {
System.out.println (“n é primo”);
}
cont++;
}
}
Alguem pode me dizer onde eu estou errando?
Crie uma variavel para acumular valores concatenados (cont = 0). Faça a divisão do valor o qual vc quer verificar se é primo por 1 até 5. Colocando o resto da divisaão em uma variavel, verifique se o resto da divisao é == 0. Se for igual a zero o numero foi dividido por x sem deixar resto, então cont recebe +1 (cont = cont+1). Quando acabar as divisões, se cont <= 2 o Número é Primo. Senão o Número não é Primo.
vlw
[quote=Rudy]Aloha pessoa com estão?
Pessoal estou começando a mexer com progrmação, já tenho algumas noçoes basicas de java (orientada com objetos) tenho que resolver uma pequena questão da facu e ñ estou conseguindo alguem pode me ajudar?
Tenho que solicitar um numero e informa se ele é primo ou ñ. Já li alguns topicos sobre o assunto, mas mesmo assim ñ me ficou muito claro, meu codigo esta assim…
[b] public void Resusltado()
{
if ( numero < 2 || numero > 2 && numero%2==0){
System.out.println (“não é primo”);
}
int cont=2;[/quote]
primeiramente vc não precisa desse 1º ‘if’, tente refazer o código usando apenas o while. Vc não precisa dividir o valor por todos os seus antecessores. Basta dividir por 1, 2, 3, 4 e 5, pois todos os números não-primo são divisiveis por no minimo 3 desses valores. Ex: 31 é divisivel so por 1, já o 30, é por 1, 2,3 e por 5. 11, so é dividido por 1.
uma dica:
int i = 1;
int cont = 0;
int mod;
while (i <= 5) {
(...)
}
if (cont <= 2)
System.out.println("Verificando... " + valor+ " � PRIMO");
else
System.out.println("Verificando... " +valor+ " N�O � PRIMO");
Crie uma variavel para acumular valores concatenados (cont = 0). Faça a divisão do valor o qual vc quer verificar se é primo por 1 até 5. Colocando o resto da divisaão em uma variavel, verifique se o resto da divisao é == 0. Se for igual a zero o numero foi dividido por x sem deixar resto, então cont recebe +1 (cont = cont+1). Quando acabar as divisões, se cont <= 2 o Número é Primo. Senão o Número não é Primo.
vlw[/quote]
[color=red]Cuidado… Para ter uma “garantia” que um número é primo vc precisa dividir ele pelos números no intervalo de [1,n/2]. Se nesse intervalo houverem mais de dois divisores o número não é primo.[/color]
EDITADO:
[color=blue]Cuidado… Para ter uma “garantia” que um número é primo vc precisa dividir ele pelos números no intervalo de [1,n/2]. Se nesse intervalo houver mais de 1 divisor o número não é primo.[/color]
Crie uma variavel para acumular valores concatenados (cont = 0). Faça a divisão do valor o qual vc quer verificar se é primo por 1 até 5. Colocando o resto da divisaão em uma variavel, verifique se o resto da divisao é == 0. Se for igual a zero o numero foi dividido por x sem deixar resto, então cont recebe +1 (cont = cont+1). Quando acabar as divisões, se cont <= 2 o Número é Primo. Senão o Número não é Primo.
vlw[/quote]
Cuidado… Para ter uma “garantia” que um número é primo vc precisa dividir ele pelos números no intervalo de [1,n/2]. Se nesse intervalo houverem mais de dois divisores o número não é primo.[/quote]
porque intervalo de 1 a n/2? não saquei. Se eu fizer multipilcação com 1,2,3,4, vou gerar qualquer número não primo. Então basta dividir por esses valores, inclusive pelo proprio valor que se deseja verificar. Até pq, para gerar um numero primo atravez de multiplicação, so é possivel quando ele for multipiicado por 1. Logo ele so vai ser dividido por 1 e por ele mesmo.
E ae léo blz? vlw a atenção.
Pessoa eu acho que fiz o que vc disse, mudei o codigo e ele ficou assim…
[b] public void Resusltado()
{
int cont=1;
int contt = 0;
while ( cont <= 5 ){
int mod = numero%cont;
if ( mod <=2 ) {
System.out.println ("é primo");
}
else {
System.out.println ("n é primo");
}
cont++;
}
}[/b]
[quote=Allan_BSO]esta duvidando velho? try to compile :shock:
minha garantia é 100%
deu tudo certo…
[i]a logica eh a seguinte:
se o numero for divisivel por 2,3,5 ou 7 entaum nao eh primo caso não eh primo.
se o numero for um dos divisores acimas entaum é primo tbm.
[/i]
Facil!!!
:!:
[/quote]
ou…
dividir por 2 primos e pelo proprio valor e dividir por 2 não primos e pelo proprio valor.
Dessas 5 divisões, se o resto da divisão for 0, pelo menos, três vezes o valor não é primo.
Pessoas o numero é primo quando o resultado de sua divisão é menor que seu divisor e seu resto diferente de zero, se eu ñ estiver errado alguem me diz o que tem de erra nessa condição.
if ( numero/cont<cont && numero%cont!=0){
System.out.println (“é primo”);
}
else {
System.out.println (“n é primo”);
}
[quote=Rudy]Pessoas o numero é primo quando o resultado de sua divisão é menor que seu divisor e seu resto diferente de zero, se eu ñ estiver errado alguem me diz o que tem de erra nessa condição.
if ( numero/cont<cont && numero%cont!=0){
System.out.println (“é primo”);
}
else {
System.out.println (“n é primo”);
}[/quote]
Teste o algorítmo que eu falei.
É de 1 até n/2 pq se até na metade do intervalo vc não encontrar 2 ou mais divisores, na outra metade você não vai encontrar.
Pessoas acho que agora deu certo, o código ficou assim…
public void Resusltado()
{
if (numero < 2){
System.out.println (“n é primo”);
}
int cont=1;
int conta=1;
while ( cont < numero ){
if ( numero%cont == 0 ){
conta++;
}
if ( conta > 2) {
System.out.println (“n é primo”);
}
else {
System.out.println (“é primo”);
}
cont++;
}
}
testei com os numeros 1, 2, 3, 4, 5, 9, 21 e pelo menos com esse numeros o resultado foi o esperado.
Se alguem poder da uma olhada para mim e me dizer se tem algum erro que eu ñ esteja vendo, eu agradeço vlw pessoas.
int c = 0;
// é menor que 2? não é primo
if ( n < 2 )
return false;
// itera de 1 até n / 2
for ( int i = 1; i < n / 2; i++ )
if ( n % i == 0 ) // n é divisível por i?
if ( ++c > 1 ) // se sim, incrementa c. se c incrementado for maior que 1, não é primo
return false;
// ufa... é primo
return true;
Ah, outra coisa, a classe BigInteger tem alguns métodos que trabalham com números primos. O método isProbablePrime de BigInteger retorna se o número passado é provavelmente um primo.