MostraSeNumPrimo.java
Publicado por Edson G. de Lima (última atualização em 08/05/2012)
[ Hits: 3.600 ]
Download MostraSeNumPrimo.java
Script bem comentado que permite ótima compreensão do algoritmo usado para identificar se o número digitado é primo e também reduzir a quantidade de processamento. Outro ponto interessante é que o script informa o motivo pelo qual um determinado número não é primo. Por exemplo: a célebre sequência 31, 331, 3.331, 33.331, 333.331, 3.333.331 e 33.333.331 onde todos são primos e nos induzem a pensar que 333.333.331, 3.333.333.331 (...) também são. O script dirá porque as próximas sequências não são.
import java.util.Scanner;
public class MostraSeNumPrimo{
public static void main (String args[]){
long num = 0;
long div = 3;
int qtdiv = 0;
Scanner leia = new Scanner (System.in);
System.out.println ("\n------------------------------------");
System.out.println ("Mostra se o número digitado é primo.");
System.out.println ("------------------------------------\n");
System.out.println ("Digite \"0\" para encerrar o programa.\n");
do{
System.out.println ("\nEntre com o número: ");
num = leia.nextLong();
if (num == 0){
System.out.println ("Encerrando o programa.");
System.out.println ("----------------------\n");
}else if (num == 1){
System.out.println ("Por definição, "+num+" NÃO É PRIMO");
}else if (num == 2){
System.out.println (num+" é o único número par que É PRIMO.");
}else if (num % 2 == 0){
System.out.println ("Exceto o 2, NENHUM número par é primo.");
}else{
/**
*Com a finalidade de reduzir a quantidade de processamento...
*
*A partir daqui usaremos a seguinte lógica: Dividiremos o número digitado pelos números ímpares
*a partir de 3, visto já sabermos que todo nº é divisível por 1. Pela definição de número primo,
*entre 1 e ele mesmo não pode haver nenhum divisor.
*O maior resultado inteiro de uma divisão é a divisão do nº por 1, cujo resultado será o
*próprio número; enquanto que se dividirmos por ele mesmo obteremos o menor resultado, que é 1.
*O segundo menor número inteiro é obtido se dividirmos o nº pela sua metade, visto que
*qualquer divisor maior que sua metade resultará em um número fracionário (>1 e <2).
*Desse modo, iremos incrementando o divisor 3, de 2 em 2 enquanto for menor ou igual à metade do nº-1,
*visto que, a partir daí, não existe resultado inteiro, podendo então, interromper o processamento.
*
*Outro ponto que iremos analisar é:
*Se encontrarmos um único divisor possível, no nosso caso: de 3 até a metade do nº,
*indicará que o nº NÃO É PRIMO, visto que estamos descartando a divisão por 1 e pelo próprio número.
**/
while ((div <= (num - 1) / 2) && (qtdiv == 0)){
if (num % div == 0){
System.out.println ("\nAlém de divisível por 1 e por ele mesmo, também é divisível por "+div);
System.out.println ("Portanto, "+num+" NÃO é primo.");
qtdiv++;
}else{
div = div + 2;
}
}
if (qtdiv == 0){
System.out.println ("O número É PRIMO.");
}
div = 3;
qtdiv = 0;
}
}while (num != 0);
}
}
Código para validar CPF e CNPJ otimizado
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
É normal não gostar de KDE? (6)
Impressora epson l6270 não funciona em Linux mint (0)
esqueci a senha do boot do notebook dell vostro 3300 (3)









