Java Πρόγραμμα για εκτύπωση Prime Numbers από 1 να 100

⚡ Έξυπνη Σύνοψη

Πρόγραμμα για εκτύπωση πρώτου αριθμού από 1 έως 100 ίντσες Java σαρώνει κάθε τιμή σε ένα εύρος και αναφέρει εκείνες που έχουν ακριβώς δύο διαιρέτες. Αυτό το άρθρο εξηγεί τον ορισμό, τη μέθοδο ελέγχου, το πλήρες πρόγραμμα, το Κόσκινο του Ερατοσθένη και μια σύγκριση απόδοσης με επαληθευμένη έξοδο.

  • 🔢 Κανόνας ορισμού: Ένας πρώτος αριθμός είναι μεγαλύτερος από το 1 και διαιρείται μόνο με το 1 και τον εαυτό του, γεγονός που αποκλείει εντελώς το 0 και το 1.
  • 🔁 Σάρωση εύρους: Ένας εξωτερικός βρόχος περπατά από το 2 στο ανώτερο όριο και αναθέτει κάθε τιμή σε μια επαναχρησιμοποιήσιμη μέθοδο ελέγχου.
  • Λογική μέθοδος: Η συνάρτηση CheckPrime επιστρέφει false στον πρώτο διαιρέτη που βρίσκεται και true όταν ο βρόχος ολοκληρωθεί χωρίς αντιστοιχία.
  • Οριοθετημένος διαιρέτης: Η δοκιμή έως και της μισής τιμής είναι σωστή και σταματήστεping στην τετραγωνική ρίζα παράγει την ίδια απάντηση πολύ πιο γρήγορα.
  • 🧮 Σύνολο αποτελεσμάτων: Υπάρχουν ακριβώς 25 πρώτοι αριθμοί μεταξύ 1 και 100, που τελειώνουν σε 97.
  • Μέθοδος κοσκινίσματος: Το Κόσκινο του Ερατοσθένη σημειώνει πολλαπλάσια σε έναν λογικό πίνακα και εκτελείται σε χρόνο O(n log log n).
  • 🧪 Πρακτική επαλήθευσης: Επιβεβαιώστε ότι το 2 περιλαμβάνεται και ότι το 1 εξαιρείται πριν εμπιστευτείτε οποιαδήποτε υλοποίηση.

Ακμή Numbers 1 έως 100 ίντσες Java

Τι είναι ο πρώτος αριθμός;

A Πρώτος αριθμός είναι ένας αριθμός που διαιρείται μόνο με το ένα ή με τον εαυτό του. Είναι ένας φυσικός αριθμός μεγαλύτερος από το ένα που δεν είναι γινόμενο δύο μικρότερων φυσικών αριθμών. Για παράδειγμα, το 11 διαιρείται μόνο με το ένα ή με τον εαυτό του. Άλλοι πρώτοι αριθμοί είναι το 2, το 3, το 5, το 7, το 11, το 13, το 17, και ούτω καθεξής.

Σημείωση: Το 0 και το 1 δεν είναι πρώτοι αριθμοί. Το 2 είναι ο μόνος άρτιος πρώτος αριθμός.

Μεταξύ 1 και 100 υπάρχουν ακριβώς 25 πρώτοι αριθμοί. Το παρακάτω πλέγμα τους ομαδοποιεί ανά δεκαετία, γεγονός που καθιστά ορατό το μοτίβο αραίωσης καθώς οι τιμές αυξάνονται.

Σειρά Ακμή Numbers Κόμης
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

Τρόπος εκτύπωσης Prime Numbers Μεταξύ 1 έως 100 Πρόγραμμα σε Java

Παρακάτω είναι το Java πρόγραμμα εκτύπωσης πρώτων αριθμών από το 1 έως το 100:

Λογική προγράμματος:

  • Η κύρια μέθοδος του Πρόγραμμα πρώτου αριθμού σε Java Περιέχει έναν βρόχο για τον έλεγχο πρώτων αριθμών μεταξύ 1 και 100 έναν προς έναν.
  • Η κύρια μέθοδος καλεί τη μέθοδο CheckPrime για να προσδιορίσετε αν ένας αριθμός είναι πρώτος αριθμός Java ή όχι.
  • Πρέπει να διαιρέσουμε έναν αριθμό εισόδου, ας πούμε 17, από τις τιμές 2 έως 17 και να ελέγξουμε το υπόλοιπο. Αν το υπόλοιπο είναι 0, ο αριθμός δεν είναι πρώτος.
  • Κανένας αριθμός δεν διαιρείται με περισσότερο από το μισό του εαυτού του. Επομένως, πρέπει να επαναλάβουμε μόνο την εντολή numberToCheck/2. Εάν η είσοδος είναι 17, το μισό είναι 8.5 και ο βρόχος θα επαναλάβει τις τιμές από 2 έως 8.
  • If numberToCheck διαιρείται εξ ολοκλήρου με έναν άλλο αριθμό, επιστρέφουμε false και ο βρόχος διακόπτεται.
  • If numberToCheck είναι πρωταρχικός, επιστρέφουμε αληθινοί.
  • Στην κύρια μέθοδο για πρώτους αριθμούς από 1 έως 100 in Java, ελέγξτε αν το isPrime είναι TRUE και προσθέστε την τιμή στον πρώτο αριθμόNumbersΒρέθηκε συμβολοσειρά.
  • Τέλος, εκτυπώστε πρώτους αριθμούς από 1 έως 100 in Java.

Ο διαχωρισμός του ελέγχου σε ξεχωριστή μέθοδο είναι αυτό που καθιστά το πρόγραμμα επαναχρησιμοποιήσιμο. Η ίδια μέθοδος CheckPrime μπορεί να κληθεί με οποιοδήποτε ανώτατο όριο απλώς αλλάζοντας τη μεταβλητή 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;

    }

}

Αναμενόμενη παραγωγή:

Η έξοδος του πρώτου αριθμού μεταξύ 1 και 100 στο Java πρόγραμμα θα είναι:

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

Η τιμή 2 περνάει επειδή η συνθήκη εσωτερικού βρόχου i <= 2 / 2 αξιολογεί να 2 <= 1, η οποία είναι ψευδής αμέσως, επομένως η μέθοδος επιστρέφει αληθή χωρίς μία μόνο διαίρεση.

Βελτιστοποιημένη έκδοση χρησιμοποιώντας το όριο της τετραγωνικής ρίζας

Η διαίρεση έως το μισό του αριθμού είναι σωστή, αλλά εκτελεί περιττή εργασία. Οι διαιρέτες εμφανίζονται πάντα σε ζεύγη γύρω από την τετραγωνική ρίζα, επομένως οποιοσδήποτε παράγοντας πάνω από το √n έχει έναν εταίρο κάτω από αυτόν που έχει ήδη ελεγχθεί.

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

Παραγωγή:

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

💡 Συμβουλές: Το StringBuilder αντικαθιστά την επαναλαμβανόμενη συνένωση συμβολοσειρών μέσα στον βρόχο. Κάθε += σε μια συμβολοσειρά δημιουργεί ένα νέο αντικείμενο, το οποίο γίνεται μετρήσιμο μόλις το ανώτερο όριο φτάσει σε αρκετές χιλιάδες.

Εκτύπωση Prime Numbers Χρησιμοποιώντας το κόσκινο του Ερατοσθένη

Όταν χρειάζεται κάθε πρώτος αριθμός σε ένα εύρος, η δοκιμαστική διαίρεση είναι το λάθος εργαλείο. Το Κόσκινο του Ερατοσθένη κατασκευάζει έναν λογικό πίνακα, σημειώνει τα πολλαπλάσια κάθε πρώτου ως σύνθετα και διαβάζει ό,τι παραμένει μη σημειωμένο.

Η μέθοδος λειτουργεί σε τρία βήματα:

  1. Δημιουργήστε έναν λογικό πίνακα μεγέθους n+1 και υποθέστε ότι κάθε δείκτης από το 2 και πάνω είναι πρώτος.
  2. Ξεκινώντας από το 2, σημειώστε κάθε πολλαπλάσιο του τρέχοντος πρώτου αριθμού ως σύνθετο.
  3. Προχωρήστε στον επόμενο μη σημειωμένο δείκτη και επαναλάβετε μέχρι να περάσετε την τετραγωνική ρίζα του 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());
    }
}

Παραγωγή:

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

Σύγκριση των Τριών Προσεγγίσεων

Και τα τρία προγράμματα εκτυπώνουν τις ίδιες 25 τιμές, επομένως η επιλογή εξαρτάται αποκλειστικά από το μέγεθος του εύρους.

Προσέγγιση Χρόνος πολυπλοκότητας Επιπλέον μνήμη Καλύτερη Σειρά
Δοκιμαστική διαίρεση σε n/2 O(n²) Ο (1) Έως και μερικές χιλιάδες
Δοκιμαστική διαίρεση σε √n O(n√n) Ο (1) Έως και μερικές εκατοντάδες χιλιάδες
Κόσκινο του Ερατοσθένη O(n log log n) O (n) Εκατομμύρια αξίες

Ελέγξτε το πρόγραμμά μας για να βρείτε πρώτοι αριθμοί από οποιονδήποτε αριθμό εισόδου όταν πρέπει να ελεγχθεί μία μόνο τιμή αντί για ένα εύρος. Για περαιτέρω ασκήσεις που βασίζονται σε βρόχους, ανατρέξτε στο Η σειρά Φιμπονάτσι στο Java, Java πρόγραμμα παλίνδρομου, και το Bubble Αλγόριθμος ταξινόμησης σε JavaΟ λογικός πίνακας που χρησιμοποιείται από το κόσκινο εξηγείται περαιτέρω στο Java συστοιχίες.

Συχνές Ερωτήσεις

Υπάρχουν ακριβώς 25. Η ακολουθία ξεκινά από το 2 και τελειώνει στο 97, και η πυκνότητα μειώνεται σταθερά καθώς οι τιμές αυξάνονται.

Η συνθήκη του εσωτερικού βρόχου γίνεται 2 <= 1, η οποία είναι αμέσως ψευδής, επομένως δεν εκτελείται διαίρεση και η μέθοδος επιστρέφει αληθή. Αυτή η μοναδική περίπτωση αξίζει να δοκιμαστεί σε κάθε υλοποίηση.

Αλλάξτε τη μεταβλητή maxCheck σε 500. Για να ξεκινήσετε πάνω από το 1, προσαρμόστε την αρχική τιμή του μετρητή εξωτερικού βρόχου και αφήστε τη μέθοδο ελέγχου ανέπαφη.

Κάθε μικρότερο πολλαπλάσιο του p περιέχει ήδη έναν μικρότερο πρώτο παράγοντα και σημειώθηκε σε ένα προηγούμενο πέρασμα. Ξεκινώντας από το τετράγωνο του p αποφεύγουμε την επανάληψη αυτής της εργασίας.

Συνήθως επιστρέφουν δοκιμαστική διαίρεση, εκτός εάν η προτροπή αναφέρει μεγάλο εύρος ή απόδοση. Η δήλωση του ανώτατου ορίου στο αίτημα συνήθως παράγει το κόσκινο.

Οι πρώτοι αριθμοί επιλέγονται ως μεγέθη πίνακα κατακερματισμού και κάδου χαρακτηριστικών επειδή κατανέμουν τα κλειδιά ομοιόμορφα και μειώνουν τις συγκρούσεις. Επίσης, εισάγουν συναρτήσεις κατακερματισμού που χρησιμοποιούνται στην διανυσματοποίηση χαρακτηριστικών.

Συνοψίστε αυτήν την ανάρτηση με: