MostraSeNumPrimo.java

Publicado por Edson G. de Lima (última atualização em 08/05/2012)

[ Hits: 3.045 ]

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.

  



Esconder código-fonte

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

Scripts recomendados

Conectando 2 Maquinas no Java

Crivo de Eratóstenes Simples em Java

Login gráfico em java

Avaliação de expressões matemáticas

Diferenca entre meses - um método de busca simples


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário