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: