Java Πρόγραμμα για εκτύπωση Prime Numbers από 1 να 100
⚡ Έξυπνη Σύνοψη
Πρόγραμμα για εκτύπωση πρώτου αριθμού από 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 Χρησιμοποιώντας το κόσκινο του Ερατοσθένη
Όταν χρειάζεται κάθε πρώτος αριθμός σε ένα εύρος, η δοκιμαστική διαίρεση είναι το λάθος εργαλείο. Το Κόσκινο του Ερατοσθένη κατασκευάζει έναν λογικό πίνακα, σημειώνει τα πολλαπλάσια κάθε πρώτου ως σύνθετα και διαβάζει ό,τι παραμένει μη σημειωμένο.
Η μέθοδος λειτουργεί σε τρία βήματα:
- Δημιουργήστε έναν λογικό πίνακα μεγέθους n+1 και υποθέστε ότι κάθε δείκτης από το 2 και πάνω είναι πρώτος.
- Ξεκινώντας από το 2, σημειώστε κάθε πολλαπλάσιο του τρέχοντος πρώτου αριθμού ως σύνθετο.
- Προχωρήστε στον επόμενο μη σημειωμένο δείκτη και επαναλάβετε μέχρι να περάσετε την τετραγωνική ρίζα του 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 συστοιχίες.

