Numeros primos

como faço para ver se um número é primo e como faço para ver todos os primos do numero?
alguem me pode ajudar.
Agradecia :wink:

1 curtida

numero primo soh é divisivel por 1 e por ele mesmo…
:lol:

agora ver os primos do numero ???
mu, intendi…
:?:

O que vc já tentou fazer? Posta ae! Tente alguma coisa!

Todo primo só é divisível por 1 e por ele mesmo, portanto:

List<Integer> numeros = new ArrayList<Integer>();

for(int i = 0; i <= 71; i++){
	numeros.add(i);
}

                int contador;
		int numero = 0;
		for (Integer i : numeros) {
			contador = 0;

		       for (int u = 1; u <= i; u++) {
				if (i % u == 0) {
					contador++;
					numero = u;
				}
			}
			
			if (contador == 2) {
				System.out.println("O Número: " + numero + " é primo e seus primos são: 1 e "+ numero);  
			}		
		}

:thumbup:

1 curtida

O que você deve fazer para saber se um número é primo é fazer um for que vai de 1 até o próprio número e dentro desse for você coloca o teste

if (numero%i==0)

aí se você achar algum divisor que não seja 1 ou o proprio número ele já pode ser desconsiderado.

Quanto aos primos do número, não seria primos entre si?
números que não tem divisores em comum

entendi perfeitamente :wink: Brigadão.

Bom vamos lá

public class Primo {

	public static void main(String[] args) {
		int primo = Integer.valueOf( args[0] );
		boolean isPrimo = true;
		int divisor = 0;
		for (int i = 2; i <= primo; i++) {
			if ( ( (primo % i) == 0) && (i != primo) ) {
				isPrimo = false;
				divisor = i;
				break;
			}
		}
		if (isPrimo) {
			System.out.println( "é Primo" );
		} else {
			System.out.println( "Não é Primo --> " + divisor );
		}

	}

}

Agora se vc quer todos os números capazes de dividir esse numero altera para isso:

import java.util.ArrayList;


public class Primo {

	public static void main(String[] args) {
		int primo = Integer.valueOf( args[0] );
		boolean isPrimo = true;
		ArrayList<Integer> divisor = new ArrayList<Integer>(); 
		for (int i = 2; i <= primo; i++) {
			if ( ( (primo % i) == 0) && (i != primo) ) {
				isPrimo = false;
				divisor.add( i );
			}
		}
		if (isPrimo) {
			System.out.println( "é Primo" );
		} else {
			System.out.print( "Não é Primo e seus divisores são --> ");
			for (Integer i : divisor) {
				System.out.print( i + ", ");
			}
		}

	}

}

Se eu soubesse não lhe falaria, pois até outro dia essa resposta valia 1 milhão de dólares.

Por força bruta, como esse programa aqui em cima, dá para responder essa pergunta tranquilamente, só que o seu computador vai demorar alguns anos para te dizer se o número 13421423421412592340334953405934533453 é primo.

Dá uma lida aqui. Se entender o que os indianos fizeram depois me explica…

No for não é necessário ir até o número vai até a raiz quadrada dele, se não achar nenhum divisor então não vai ter mais pra frente.

Ex.: o raiz quadrada de 169 é 13 primeiro divisor depois do 1.

Não existem “primos do número” (se o número é Joaquim, seus primos são Manoel e Pedro?);
existem “divisores primos do número”.
Para achar os divisores primos de um número (ou seja, fatorá-lo), existem diversas técnicas. (Veja http://en.wikipedia.org/wiki/Integer_factorization )

A mais simples é calcular a raiz quadrada desse número, e achar os primos até a raiz quadrada desse número. Então se faz a divisão por tentativas.
(Veja http://en.wikipedia.org/wiki/Trial_division ).

Um exemplo: digamos que você queira saber os fatores primos do número 1234567.
Primeiramente, sabemos que a raiz quadrada desse número é 1111.
Então sabemos que no mínimo devemos achar os primos até o número 1111.
Para achar os primos de 2 até 1111, devemos usar um algoritmo chamado “Crivo de Erastótenes” (veja http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes ).
Uma vez achados os primos, vamos começar a dividir o número.
O primeiro número que divide 1234567 é 127 (dando o valor 9721). Mas 9721 também é primo (aham - ele é maior que 1111; fica como exercício você descobrir que 9721 é primo), e então a fatoração terminou.
Note que para números não muito grandes, a fatoração por esse método é inviável porque a raiz quadrada de um número grande é também grande e você não consegue armazenar todos os números primos até esse valor, para fazer o tal crivo.

Se você quiser usar um método do próprio Java que determina se um número é provavelmente primo (ou seja, pode ser que o número não seja primo embora o método ache que é primo - mas com uma probabilidade bastante reduzida, menor que a de você ganhar a Mega-Sena 3 vezes seguidas) - você pode usar isProbablePrime, mas não há no Java um método que faça a fatoração conforme você quer.

Bem estou trabalhando a lógica… então estou procurando não utilizar muito a linguagem.
Abaixo segue como calculei o numero primo.

public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Digite o numero: ");
        int numero=in.nextInt();
        double numeroDouble=numero;
        if ((numeroDouble/numeroDouble)==(numero/numero)){
            if(numeroDouble/2!=numero/2 || numero==2){
                System.out.println("Este numero é primo!");
            } else {
                System.out.println("Este numero não é primo!");
            }
        } else {
            System.out.println("Numero não é primo!");
        }
    }
1 curtida

[quote=dap1995]Bem estou trabalhando a lógica… então estou procurando não utilizar muito a linguagem.
Abaixo segue como calculei o numero primo.

public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Digite o numero: ");
        int numero=in.nextInt();
        double numeroDouble=numero;
        if ((numeroDouble/numeroDouble)==(numero/numero)){
            if(numeroDouble/2!=numero/2 || numero==2){
                System.out.println("Este numero é primo!");
            } else {
                System.out.println("Este numero não é primo!");
            }
        } else {
            System.out.println("Numero não é primo!");
        }
    }

[/quote]

Esse código não faz qualquer sentido. Ele está testando se o número é divisível por ele mesmo no primeiro if? Isso é uma tautologia. Todo número é divisível por ele mesmo dá 1 e resto 0.

O segundo está testando se é divisível por 2. Mas você pode ter números que são divisíveis por si mesmo, não são por 2, mas não são primos, como é o caso do número 9 (divisível por 3).

Além disso, para testar se um número é divisível por outro, você pode usar o operador de resto. Lembre-se, quando um número é divisível por outro, o resto é 0.