Java Programa para Imprimir Prime Numbers de 1 para 100

โšก Resumo Inteligente

Programa para imprimir nรบmero primo de 1 a 100 pol. Java O Crivo de Eratรณstenes examina todos os valores em um intervalo e reporta aqueles que possuem exatamente dois divisores. Este artigo explica a definiรงรฃo, o mรฉtodo de verificaรงรฃo, o programa completo e uma comparaรงรฃo de desempenho com resultados verificados.

  • ๐Ÿ”ข Regra de definiรงรฃo: Um nรบmero primo รฉ maior que 1 e divisรญvel apenas por 1 e por si mesmo, excluindo completamente 0 e 1.
  • ๐Ÿ” Varredura de alcance: Um laรงo externo percorre o intervalo de 2 atรฉ o limite superior e delega cada valor a um mรฉtodo de verificaรงรฃo reutilizรกvel.
  • โœ… Mรฉtodo booleano: A funรงรฃo CheckPrime retorna falso no primeiro divisor encontrado e verdadeiro quando o loop termina sem uma correspondรชncia.
  • โˆš Divisor vinculado: Testar atรฉ metade do valor estรก correto e parar.ping A raiz quadrada produz a mesma resposta muito mais rapidamente.
  • ๐Ÿงฎ Conjunto de resultados: Existem exatamente 25 nรบmeros primos entre 1 e 100, terminando em 97.
  • โšก Mรฉtodo da peneiraรงรฃo: O Crivo de Eratรณstenes identifica mรบltiplos em um vetor booleano e tem complexidade de tempo O(n log log n).
  • ๐Ÿงช Prรกtica de verificaรงรฃo: Confirme se o item 2 estรก incluรญdo e se o item 1 estรก excluรญdo antes de confiar em qualquer implementaรงรฃo.

Prime Numbers 1 a 100 in Java

O que รฉ um nรบmero primo?

A Nรบmero primo Um nรบmero primo รฉ divisรญvel apenas por um ou por si mesmo. ร‰ um nรบmero natural maior que um que nรฃo รฉ produto de dois nรบmeros naturais menores. Por exemplo, 11 รฉ divisรญvel apenas por um ou por si mesmo. Outros nรบmeros primos sรฃo 2, 3, 5, 7, 11, 13, 17 e assim por diante.

Observaรงรฃo: 0 e 1 nรฃo sรฃo nรบmeros primos. 2 รฉ o รบnico nรบmero primo par.

Entre 1 e 100, existem exatamente 25 nรบmeros primos. A tabela abaixo os agrupa por dรฉcada, o que torna visรญvel o padrรฃo de rarefaรงรฃo ร  medida que os valores aumentam.

Variaรงรฃo Prime Numbers Contar
1 - 20 2, 3, 5, 7, 11, 13, 17, 19 8
21 - 40 23, 29, 31, 37 4
41 - 60 41, 43, 47, 53, 59 5
61 - 80 61, 67, 71, 73, 79 5
81 - 100 83, 89, 97 3

Como imprimir Prime Numbers Entre 1 a 100 Programa em Java

Abaixo estรก o Java programa para imprimir nรบmeros primos de 1 a 100:

Lรณgica do Programa:

  • O principal mรฉtodo do programa de nรบmeros primos em Java Contรฉm um loop para verificar nรบmeros primos entre 1 e 100, um por um.
  • O mรฉtodo principal chama o mรฉtodo CheckPrime para determinar se um nรบmero รฉ primo em Java ou nรฃo.
  • Precisamos dividir um nรบmero de entrada, digamos 17, pelos valores de 2 a 17 e verificar o resto. Se o resto for 0, o nรบmero nรฃo รฉ primo.
  • Nenhum nรบmero รฉ divisรญvel por mais da metade de si mesmo. Portanto, precisamos percorrer apenas o nรบmero_para_verificar dividido por 2. Se a entrada for 17, a metade รฉ 8.5, e o loop iterarรก pelos valores de 2 a 8.
  • If numberToCheck Se um nรบmero for inteiramente divisรญvel por outro, retornamos falso e o loop รฉ interrompido.
  • If numberToCheck รฉ primo, retornamos verdadeiro.
  • No mรฉtodo principal para nรบmeros primos de 1 a 100 em Java, verifique se isPrime รฉ TRUE e adicione o valor ao nรบmero primo.NumbersString encontrada.
  • Por fim, imprima nรบmeros primos de 1 a 100 em Java.

O que torna o programa reutilizรกvel รฉ a separaรงรฃo da verificaรงรฃo em um mรฉtodo prรณprio. O mesmo mรฉtodo `CheckPrime` pode ser chamado com qualquer limite superior, bastando alterar a variรกvel `maxCheck`.

public class PrimeNumbers {

    public static void main(String[] args) {

        int i;
        int num = 0;
        int maxCheck = 100; // maxCheck limit till which you want to find prime numbers
        boolean isPrime = true;

        //Empty String
        String primeNumbersFound = "";

        //Start loop 2 to maxCheck
        for (i = 2; i <= maxCheck; i++) {
            isPrime = CheckPrime(i);
            if (isPrime) {
                primeNumbersFound = primeNumbersFound + i + " ";
            }
        }
        System.out.println("Prime numbers from 1 to " + maxCheck + " are:");
        // Print prime numbers from 1 to maxCheck
        System.out.println(primeNumbersFound);
    }
    public static boolean CheckPrime(int numberToCheck) {
        int remainder;
        for (int i = 2; i <= numberToCheck / 2; i++) {
            remainder = numberToCheck % i;
            //if remainder is 0 then the number is not prime and we break the loop. Else continue the loop
            if (remainder == 0) {
                return false;
            }
        }
        return true;

    }

}

Resultado esperado:

A saรญda do nรบmero primo entre 1 e 100 no Java programa serรก:

Prime numbers from 1 to 100 are:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

O valor 2 รฉ aprovado devido ร  condiรงรฃo do loop interno. i <= 2 / 2 avalia como 2 <= 1, que รฉ falso imediatamente, entรฃo o mรฉtodo retorna verdadeiro sem nenhuma divisรฃo.

Versรฃo otimizada usando o limite da raiz quadrada

Dividir atรฉ a metade do nรบmero estรก correto, mas realiza cรกlculos desnecessรกrios. Os divisores sempre ocorrem em pares ao redor da raiz quadrada, portanto, qualquer fator acima de โˆšn tem um correspondente abaixo dele que jรก foi testado.

public class PrimeNumbersOptimized {

    public static void main(String[] args) {
        int maxCheck = 100;
        int count = 0;
        StringBuilder result = new StringBuilder();

        for (int i = 2; i <= maxCheck; i++) {
            if (isPrime(i)) {
                result.append(i).append(" ");
                count++;
            }
        }

        System.out.println("Prime numbers from 1 to " + maxCheck + " are:");
        System.out.println(result.toString().trim());
        System.out.println("Total primes found: " + count);
    }

    public static boolean isPrime(int n) {
        if (n <= 1) return false;
        if (n == 2) return true;
        if (n % 2 == 0) return false;

        // test only odd divisors up to the square root
        for (int i = 3; i * i <= n; i += 2) {
            if (n % i == 0) return false;
        }
        return true;
    }
}

Saรญda:

Prime numbers from 1 to 100 are:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
Total primes found: 25

๐Ÿ’ก Dica: O StringBuilder substitui a concatenaรงรฃo repetida de strings dentro do loop. Cada += A operaรงรฃo em uma String cria um novo objeto, que se torna mensurรกvel quando o limite superior atinge vรกrios milhares.

Impressรฃo Prime Numbers Usando o Crivo de Eratรณstenes

Quando todos os nรบmeros primos em um intervalo sรฃo necessรกrios, a divisรฃo por tentativa รฉ a ferramenta errada. O Crivo de Eratรณstenes constrรณi uma matriz booleana, marca os mรบltiplos de cada primo como compostos e lรช o que resta sem marcaรงรฃo.

O mรฉtodo funciona em trรชs etapas:

  1. Crie um array booleano de tamanho n+1 e assuma que todos os รญndices a partir de 2 sรฃo primos.
  2. A partir de 2, marque todos os mรบltiplos do nรบmero primo atual como compostos.
  3. Avance para o prรณximo รญndice nรฃo marcado e repita atรฉ que a raiz quadrada de n seja ultrapassada.
import java.util.Arrays;

public class SieveOfEratosthenes {

    public static void main(String[] args) {
        int n = 100;
        boolean[] composite = new boolean[n + 1];

        for (int p = 2; p * p <= n; p++) {
            if (!composite[p]) {
                // start at p*p because smaller multiples are already marked
                for (int multiple = p * p; multiple <= n; multiple += p) {
                    composite[multiple] = true;
                }
            }
        }

        StringBuilder result = new StringBuilder();
        for (int i = 2; i <= n; i++) {
            if (!composite[i]) {
                result.append(i).append(" ");
            }
        }

        System.out.println("Prime numbers from 1 to " + n + " are:");
        System.out.println(result.toString().trim());
    }
}

Saรญda:

Prime numbers from 1 to 100 are:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

Comparaรงรฃo das trรชs abordagens

Os trรชs programas imprimem os mesmos 25 valores, portanto a escolha depende inteiramente do tamanho do intervalo.

Abordagem Complexidade de tempo Memรณria extra Melhor Range
Divisรฃo de teste para n/2 O (nยฒ) O (1) Atรฉ alguns milhares
Divisรฃo de teste para โˆšn O(nโˆšn) O (1) Atรฉ algumas centenas de milhares
Peneira de Eratรณstenes O(n log log n) O (n) Milhรตes de valores

Confira nossa programaรงรฃo para descobrir. nรบmeros primos a partir de qualquer nรบmero de entrada quando um รบnico valor, em vez de um intervalo, precisa ser testado. Para mais exercรญcios com loops, consulte o Sรฉrie de Fibonacci em Java, Java programa palรญndromo, e a Bubble Algoritmo de classificaรงรฃo em JavaO array booleano usado pela peneira รฉ explicado mais detalhadamente em Java matrizes.

Perguntas Frequentes

Existem exatamente 25. A sequรชncia comeรงa em 2 e termina em 97, e a densidade diminui constantemente ร  medida que os valores aumentam.

A condiรงรฃo do loop interno passa a ser 2 <= 1, que รฉ imediatamente falsa, portanto nenhuma divisรฃo รฉ realizada e o mรฉtodo retorna verdadeiro. Vale a pena testar esse caso especรญfico em todas as implementaรงรตes.

Altere a variรกvel maxCheck para 500. Para comeรงar acima de 1, ajuste o valor inicial do contador do loop externo e deixe o mรฉtodo de verificaรงรฃo inalterado.

Todo mรบltiplo menor de p jรก contรฉm um fator primo menor e foi identificado em uma passagem anterior. Comeรงar em p ao quadrado evita repetir esse trabalho.

Normalmente, retornam a divisรฃo por tentativa, a menos que a solicitaรงรฃo mencione um intervalo amplo ou desempenho. Indicar o limite superior na solicitaรงรฃo geralmente produz o resultado da peneira.

Os nรบmeros primos sรฃo escolhidos como tamanhos de tabela hash e de buckets de caracterรญsticas porque distribuem as chaves uniformemente e reduzem as colisรตes. Eles tambรฉm servem como ponto de partida para as funรงรตes de hash usadas na vetorizaรงรฃo de caracterรญsticas.

Resuma esta postagem com: