GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Java maior primo

Tags: #<Tag:0x00007f289d54e738>

como fazer : qual o maior numero primo(como faça para mostrar o maior numero primo
(exemplo: 1 até 10 , o maior numero primo é 7):
meu codigo:
sou iniciante

import java.util.Scanner;
public class Atividade {
public static void main(String[] args) {
Scanner leitura= new Scanner(System.in);
int f,in;
System.out.println(“primeiro numero:”);
in= leitura.nextInt();
System.out.println(“ultimo numero:”);
f= leitura.nextInt();

     for(int i= in; i <= f; i++){
     int re =0;
      
        for(int k=1 ;k<=in; k++){
            if (in%k ==0 ){
                ++re; 
            }   
        }
        if(re == 2){
            System.out.println("numero primo: " + in);
        }
     } 
}       

}

Olá.
Segue um exemplo comentado. Espero que ajude a entender. É logico que existem n maneiras de fazer inclusive algumas mais “bonitas”, porém para fim de entendimento da logica creio que vá lhe ajudar:

package aaparametros ;

import java.util.ArrayList ;

public class Atividade {
    public static void main ( String [ ] args ) {
	int		      menorNumeroDoIntervalo = 1 ;		      //aqui é onde voce vai ler o primeiro numero da sua sequencia
	int		      maiorNumeroDoIntervalo = 100 ;		      //aqui é onde voce vai ler o ultimo numero da sua sequencia
	int		      contaprimo	     = 0 ;		      //aqui temos um contador de primos para saber se o numero é primo ( divisivel somente por 1 e por ele meesmo ou nao)
	ArrayList < Integer > primos		     = new ArrayList <> ( ) ; //aqui é a lista onde iremos colocar todos os primos que encontrarmos

	//aqui vamos iterar sobre todos os numeros dentro do intervalo
	for ( int x = menorNumeroDoIntervalo ; x <= maiorNumeroDoIntervalo ; x ++ ) {

	    //aqui vamos iterar e dividir cada um dos numeros do intervalo para saber se sao primos ou nao
	    for ( int i = x ; i >= menorNumeroDoIntervalo ; i -- ) {

		//aqui testamos o resto da divisao pra saber se dividiu ou nao. Se % retornar sobra é porque nao dividiu ,caso retorne 0 fazemos a variavel contaprimo somar 1 ao valor que ela ja contem.
		if ( x % i == 0 ) {
		    contaprimo ++ ;
		}
	    }

	    //terminado o loop de testes verificamos se a variavel contaprimo é igual a 2 , se for é sinal que o numero so dividiu por 1 e por ele mesmo, logo , é um numero primo
	    if ( contaprimo == 2 ) {
		System.out.println ( x + " = É primo" ) ;
		// se o valor da variavel contaprimo mostrar que o numero na variavel x que estamos avaliando é um numero primo colocamos ele em uma lista
		primos.add ( x ) ;
	    }
	    // zeramos o contador de primos para o proximo loop
	    contaprimo = 0 ;
	}

	//aqui pegamos o ultimo numero que adicionamos na lista de primos e teremos o maior primo encontrado no intervalo
	System.out.println ( "O maior primo do intervalo é: " + primos.get ( primos.size ( ) - 1 ) ) ;

    }
}

Espero ter ajudado.

1 Curtida

Deixando uma solução alternativa:

class Main {
    
    public static void main(String[] args) {
        int limiteInferior = 1;
        int limiteSuperior = 100;
        
        int maiorPrimo = -1; //inicializa a variável;
        
        //Pecorre os valores de forma decrescente.
        for(int i = limiteSuperior; i >= limiteInferior; i--) {
            if(ehPrimo(i) == true) {
                maiorPrimo = i;
                break;
            }
        }
        
        System.out.println("Maior primo: " + maiorPrimo);
        
    }
    
    private static boolean ehPrimo(long n) {
        // 1 não é primo.
        if(n == 1) {
            return false;
        }
        
        for(int i = 2; i < n; i++) {
            if(n % i == 0)
               return false;
        }
        
        return true;
    }
}
1 Curtida

Muito obrigado!

Esse método está errado, ele só verifica se o número não é divisível por múltiplos de 2.

1 Curtida

Acho que implementei certo. :thinking:

Ou não estou vêndo o erro!

Porque multiplos de 2? Ele incrementa o i normalmente em uma unidade. É ineficiente porque o ciclo necessitava apenas de ir até à raiz quadrada de n e não até ao próprio n mas não é errado.

2 Curtidas

Eita, só observei a inicialização.
Falha minha.
:pleading_face:

3 Curtidas
//