Informa se inteiro é primo ou ñ

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?

Vlw…

nada

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");
        

Eu acho que fica mais facil assim:
Saca soh!! :smiley:

[code]public class IsPrimo {
public boolean isPrimo(int intNumero1){

	boolean isPrimo;
	
	if
	(((intNumero1%2==0)||(intNumero1%3==0)||(intNumero1%5==0)||(intNumero1%7==0))
	&&
	((intNumero1!=2)&&(intNumero1!=3)&&(intNumero1!=5)&&(intNumero1!=7))){
		isPrimo = false;			
	}else{
		isPrimo = true;
	}
	
	return isPrimo;
}

}
[/code]

Qqr coisa, posta ai!

:wink:

[quote=leobr84]nada

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]

[quote=Allan_BSO]Eu acho que fica mais facil assim:
Saca soh!! :smiley:

[code]public class IsPrimo {
public boolean isPrimo(int intNumero1){

	boolean isPrimo;
	
	if
	(((intNumero1%2==0)||(intNumero1%3==0)||(intNumero1%5==0)||(intNumero1%7==0))
	&&
	((intNumero1!=2)&&(intNumero1!=3)&&(intNumero1!=5)&&(intNumero1!=7))){
		isPrimo = false;			
	}else{
		isPrimo = true;
	}
	
	return isPrimo;
}

}
[/code]

Qqr coisa, posta ai!

:wink: [/quote]

A é?

E 11?
E 13?
E 17?
E…???

[quote=davidbuzatto][quote=leobr84]nada

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.

esta duvidando velho? try to compile :shock:

minha garantia é 100% :wink:

deu tudo certo…

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.

Facil!!!

:!:

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]

mas… ñ ta rodando direito ñ…

[quote=Allan_BSO]esta duvidando velho? try to compile :shock:

minha garantia é 100% :wink:

deu tudo certo…

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.

Facil!!!

:!:

[/quote]

A é? Se fosse tão simples assim, acho que muita gente não teria estudado tanto a geração/verificação de números primos.

121 no seu algoritimo é primo, mas na verdade não é, pois é divisível por 11 :smiley:

[quote=Allan_BSO]esta duvidando velho? try to compile :shock:

minha garantia é 100% :wink:

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.

[quote=davidbuzatto][quote=Allan_BSO]esta duvidando velho? try to compile :shock:

minha garantia é 100% :wink:

deu tudo certo…

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.

Facil!!!

:!:

[/quote]

A é? Se fosse tão simples assim, acho que muita gente não teria estudado tanto a geração/verificação de números primos.

121 no seu algoritimo é primo, mas na verdade não é, pois é divisível por 11 :D[/quote]

ishi!!! Pode crer, corretissimo davidbuzatto!!

O CERTO É DIVIDIR POR 1 até n/2

Tinha feito esse código há umas semanas, e não tinha enxergado esse teu detalhe!! :slight_smile:

falei merda. mal ae hahahaha vlw

Testa o 121 ai então :smiley:

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”);
}

Acontece :smiley:

[]´s

[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.

Quer um código mais performático?

Olha esse aqui que eu fiz :smiley:

[code]public boolean ehPrimo( int n ) {

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;

}[/code]

Testa o 121 ai então :D[/quote]

Vc esta certo…
Errei admito!!!

mas se eu acrescentar o 11 na minha lógica acima, acredito que o problema será resolvido.

certo?

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.