Java Programma per stampare Prime Numbers da 1 a 100

⚡ Riepilogo intelligente

Programma per stampare numeri primi da 1 a 100 pollici Java Questo algoritmo analizza ogni valore all'interno di un intervallo e segnala quelli che hanno esattamente due divisori. L'articolo illustra la definizione, il metodo di verifica, il programma completo, il Crivello di Eratostene, e un confronto delle prestazioni con risultati verificati.

  • 🔢 Regola di definizione: Un numero primo è maggiore di 1 ed è divisibile solo per 1 e per se stesso, escludendo completamente 0 e 1.
  • 🔁 Scansione di portata: Un ciclo esterno percorre il ciclo da 2 al limite superiore e delega ciascun valore a un metodo di verifica riutilizzabile.
  • Metodo booleano: CheckPrime restituisce false al primo divisore trovato e true quando il ciclo termina senza trovare una corrispondenza.
  • Limite del divisore: Testare fino a metà del valore è corretto e fermarsiping calcolando la radice quadrata si ottiene lo stesso risultato molto più velocemente.
  • 🧮 Set di risultati: Tra 1 e 100 esistono esattamente 25 numeri primi, fino ad arrivare a 97.
  • Metodo del setaccio: Il crivello di Eratostene individua i multipli in un array booleano e ha una complessità temporale di O(n log log n).
  • 🧪 Procedura di verifica: Prima di fidarsi di qualsiasi implementazione, verificare che il punto 2 sia incluso e che il punto 1 sia escluso.

Prima Numbers Da 1 a 100 pollici Java

Cos'è un numero primo?

A Numero primo Un numero primo è un numero divisibile solo per uno o per se stesso. È un numero naturale maggiore di uno che non è il prodotto di due numeri naturali più piccoli. Ad esempio, 11 è divisibile solo per uno o per se stesso. Altri numeri primi sono 2, 3, 5, 7, 11, 13, 17 e così via.

Nota: 0 e 1 non sono numeri primi. 2 è l’unico numero primo pari.

Tra 1 e 100 ci sono esattamente 25 numeri primi. La griglia sottostante li raggruppa per decennio, rendendo visibile la progressiva diminuzione del numero di numeri primi all'aumentare dei valori.

Portata Prima Numbers Contare
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

Come stampare Prime Numbers Tra 1 e 100 Programma in Java

Di seguito è il Java programma per stampare i numeri primi da 1 a 100:

Logica del programma:

  • Il metodo principale del programma di numeri primi in Java contiene un ciclo per controllare uno per uno i numeri primi compresi tra 1 e 100.
  • Il metodo main chiama il metodo CheckPrime per determinare se un numero è un numero primo in Java o non.
  • Dobbiamo dividere un numero dato, ad esempio 17, per i valori compresi tra 2 e 17 e controllare il resto. Se il resto è 0, il numero non è primo.
  • Nessun numero è divisibile per più della metà di se stesso. Quindi, dobbiamo iterare solo su numeroDaControllare/2. Se l'input è 17, la metà è 8.5 e il ciclo itererà sui valori da 2 a 8.
  • If numberToCheck se è interamente divisibile per un altro numero, restituiamo false e il ciclo viene interrotto.
  • If numberToCheck è primo, restituiamo vero.
  • Nel metodo principale per i numeri primi da 1 a 100 in Java, verifica se isPrime è TRUE e aggiungere il valore al numero primoNumbersStringa trovata.
  • Infine, stampa i numeri primi da 1 a 100 in Java.

Separare il controllo in un metodo a sé stante è ciò che rende il programma riutilizzabile. Lo stesso metodo CheckPrime può essere chiamato con qualsiasi limite superiore semplicemente modificando la variabile 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;

    }

}

Uscita prevista:

L'output del numero primo compreso tra 1 e 100 nel Java Programma sarà:

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

Il valore 2 passa perché la condizione del ciclo interno i <= 2 / 2 valuta a 2 <= 1, che è subito falso, quindi il metodo restituisce vero senza alcuna divisione.

Versione ottimizzata utilizzando il limite della radice quadrata

Dividere fino a metà del numero è corretto, ma esegue un lavoro non necessario. I divisori si presentano sempre a coppie attorno alla radice quadrata, quindi ogni fattore maggiore di √n ha un corrispondente minore che è già stato testato.

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

Produzione:

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

Suggerimento: StringBuilder sostituisce la concatenazione ripetuta di stringhe all'interno del ciclo. += su una stringa crea un nuovo oggetto, che diventa misurabile una volta che il limite superiore raggiunge diverse migliaia.

Stampa Focus Numbers Utilizzando il crivello di Eratostene

Quando è necessario individuare tutti i numeri primi di un intervallo, la divisione per tentativi non è lo strumento adatto. Il Crivello di Eratostene costruisce una matrice booleana, contrassegna i multipli di ciascun numero primo come composti e legge ciò che rimane non contrassegnato.

Il metodo si articola in tre fasi:

  1. Crea un array booleano di dimensione n+1 e supponi che ogni indice da 2 in su sia primo.
  2. A partire da 2, contrassegna ogni multiplo del numero primo corrente come composto.
  3. Passa all'indice successivo non contrassegnato e ripeti l'operazione finché non viene superata la radice quadrata di n.
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());
    }
}

Produzione:

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

Confronto dei tre approcci

Tutti e tre i programmi stampano gli stessi 25 valori, quindi la scelta dipende interamente dalla dimensione dell'intervallo.

Approccio Complessità temporale Memoria extra gamma più piccola
Divisione della prova a n/2 O(n²) O (1) Fino a qualche migliaio
Divisione di prova in √n O(n√n) O (1) Fino a qualche centinaio di migliaia
Setaccio di Eratostene O(n log log n) O (n) Milioni di valori

Controlla il nostro programma per trovare numeri primi da qualsiasi numero di input quando è necessario testare un singolo valore anziché un intervallo. Per ulteriori esercizi basati sui cicli, rivedere il serie di Fibonacci in Java, il Java programma palindromo Bubble Algoritmo di ordinamento in JavaL'array booleano utilizzato dal setaccio è spiegato ulteriormente in Java array.

DOMANDE FREQUENTI

Sono esattamente 25. La sequenza inizia da 2 e termina a 97, e la densità diminuisce costantemente all'aumentare dei valori.

La condizione del ciclo interno diventa 2 <= 1, che è immediatamente falsa, quindi non viene eseguita alcuna divisione e il metodo restituisce true. Vale la pena testare questo singolo caso in ogni implementazione.

Modifica la variabile maxCheck a 500. Per iniziare con un valore superiore a 1, regola invece il valore iniziale del contatore del ciclo esterno e lascia invariato il metodo di controllo.

Ogni multiplo più piccolo di p contiene già un fattore primo più piccolo ed è stato contrassegnato durante una passata precedente. Partire da p al quadrato evita di ripetere quel lavoro.

In genere restituiscono la divisione di prova, a meno che la richiesta non menzioni un intervallo ampio o una prestazione elevata. Indicare il limite superiore nella richiesta di solito produce invece il setaccio.

I numeri primi vengono scelti come dimensioni per le tabelle hash e i bucket delle caratteristiche perché distribuiscono le chiavi in ​​modo uniforme e riducono le collisioni. Inoltre, vengono utilizzati come iniziali per le funzioni di hashing impiegate nella vettorizzazione delle caratteristiche.

Riassumi questo post con: