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.

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
CheckPrimepara 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
numberToCheckSe 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 รฉ
TRUEe 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:
- Crie um array booleano de tamanho n+1 e assuma que todos os รญndices a partir de 2 sรฃo primos.
- A partir de 2, marque todos os mรบltiplos do nรบmero primo atual como compostos.
- 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.
