2016-06-30 7 views
-5

Meine Zuordnung lautet:Wie schreibe ich eine Schleife, um mehrere Primzahlen in Java anzuzeigen?

Schreiben Sie ein Programm, das alle Primzahlen zwischen einer und einer Nummer, die Sie dem Benutzer eingeben können, findet.

  • Suchen Sie die Primzahlen zwischen 0 und der vom Benutzer eingegebenen Zahl.
  • Drucken Sie diese Primzahlen, eine pro Zeile.
  • Fügen Sie nach jeder Primzahl einen Doppelpunkt hinzu und drucken Sie dann alle nicht-Primzahlen aus, die eliminiert wurden.

Grundsätzlich sind diese Nicht-Primzahlen die Vielfachen der Primzahlen.

Zum Beispiel, wird die Ausgabe wie folgt aussehen:

2: 4 6 8 10 12 14 16 18... 
3: 9 15 21 27 

ich Primzahlen tat. Ich kann nicht herausfinden, wie man Vielfache berechnet und anzeigt? Hilfe bitte!

package assignment4; 

import java.util.Scanner; 

public class Assignment4 { /** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    Scanner s = new Scanner(System.in); 
    final int START = 1; 
    System.out.print("Enter the end number number : "); 
    int end = s.nextInt(); 
    System.out.println("List of prime numbers between " + START + " and " 
    + end); 
     for (int i = START; i <= end; i++) { 
     if (isPrime(i)) { 
      System.out.println(i + ":"); 
     } 
    } 
} 

    public static boolean isPrime(int n) { 
    if (n <= 1) { 
     return false; 
    } 
    for (int i = 2; i < Math.sqrt(n); i++) { 
     if (n % i == 0) { 
      return false; 
     } 
    } 
    return true;} 

} 
+0

Sie brauchen nur ein Array zu erstellen und die Primzahlen in der es einfügen ... –

+0

Einige Hinweise: (1) Der dritte Ausdruck eines 'for' muss nicht die Form' x ++ 'haben. Sie können eine 'for' -Schleife haben, die aussieht wie' für (int j = 2 * i; j <= end; j + = i) ', die jedes Mal' i' zum Index hinzufügt. (2) Es sieht so aus, als ob Sie nur jedes Mehrfaches drucken dürfen (Sie drucken 6 auf der Zeile, die mit 2 beginnt, so dass Sie es nicht auf der "3" Zeile drucken können). Es gibt ein paar gute Möglichkeiten, um Zahlen, die Sie bereits gedruckt haben, zu verfolgen: 'Set' und eine Reihe von Boolean. – ajb

+0

Aus dem Wortlaut der Frage, insbesondere der Phrase "Nicht-Primzahlen, die eliminiert wurden", denke ich, dass Ihr Lehrer möchte, dass Sie den Sieve von Eratosthenes Algorithmus zum Auffinden der Primzahlen verwenden. Wikipedia-Seite ist hier: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes – msandiford

Antwort

0

Das Anzeigen von Vielfachen wäre einfach, wenn Sie mit Sieb des Erathrosthenes sieben würden. Sie erstellen ein Array von Zahlen von 2 bis n. Beginnen Sie mit 2, markieren Sie alle Vielfachen nicht-prime: 2 4 6 ... drucken Sie sie aus. Wählen Sie die nächste Primzahl (d. H. Die Nummer, die nicht als nichtprimär markiert wurde), d. H. 3, markieren Sie alle Nicht-Primzahlen aller Vielfachen (die noch nicht vorhanden waren): 9 15 ... und so weiter.

einfachste Lösung:

boolean[] x = new boolean[N];// x[i] is true when i is not prime 
    for(int i=2;i<N;i++){ 
     if(!x[i]){ 
      System.out.print(i+" : "); 
      for(int j=i*i;j<N;j+=i){ 
       if(!x[j]) 
       System.out.print(j+" "); 
       x[j]=true; 
      } 
     System.out.println(); 
     } 
    } 
+0

Nicht ganz gut genug. Sehen Sie sich die erwartete Ausgabe für "3" an: Es hat nicht 12, aber Ihr Algorithmus würde es drucken. Ich denke nicht, dass es für mich eine gute Idee ist, jemandem die Hausaufgaben zu machen. – ajb

+0

@ajb bearbeitet. funktioniert – RE60K

0

Ich gehe davon aus, dass Sie Druck haben, die ein Vielfaches, bis die end Nummer möchten. Sie könnten Nest eine while-Schleife, die die Primzahl multipliziert wie folgt:

for (int i = START; i <= end; i++) { 
    if (isPrime(i)) { 
     System.out.print(i + ": "); //Changed to print so that the multiples are on the same line 
     int multiple = i * 2; 
     while (multiple <= end) { 
      multiple += i; 
      System.out.print(multiple + ", "); 
     } 
     System.out.println(""); 
    } 
} 
+0

Nicht ganz gut genug. Sehen Sie sich die erwartete Ausgabe für "3" an: Sie hat keine 6 oder 12. – ajb

+0

Welches 'Ende' haben Sie benutzt? Ich habe angegeben, dass die Schleife so lange weiterdrucken soll, bis das Ende erreicht ist. Sie können jedoch auch einen anderen Wert angeben. – student1868

0

Bitte unten Antwort überprüfen für Ihre Anforderung,

package assignment4; 

    import java.util.*; 
    import java.lang.*; 
    import java.io.*; 


    public class Assignment4 
    { 
      public static List<Integer> primeNumbers = new ArrayList<>(); 
     public static String strOtherData[]; 

    public static void main (String[] args) throws java.lang.Exception 
     { 
     final int START = 1; 
     System.out.print("Enter the end number number : "); 
     int end = s.nextInt(); 

     System.out.println("List of prime numbers between " + START + " and " + end); 

     for (int i = START; i <= end; i++) { 
       if (isPrime(i)) { 
        primeNumbers.add(i); 
       } 
      } 

      strOtherData = new String[primeNumbers.size()]; 

      for (int i = START; i <= end; i++) { 
       isMultiple(i); 
      } 

      int tempCount = 0; 
      for(Integer currentNumber : primeNumbers) 
      { 
       System.out.print(currentNumber + ": \t"); 

      if(strOtherData.length > tempCount) 
       { 
       System.out.print(strOtherData[tempCount] + "\n\n"); 
       } 

       tempCount++; 
      } 
     } 

     public static boolean isPrime(int n) { 
      if (n <= 1) { 
        return false; 
      } 
      for (int i = 2; i <= n/2; i++) 
      { 
       if (n % i == 0) 
       { 
       return false; 
       } 
      } 
      return true; 
    } 

    public static void isMultiple(int n) 
    { 
      if (n <= 1) { 
        return; 
      } 

      if(isPrime(n)) 
       return; 

      int count = 0; 
      for(Integer currentInt : primeNumbers) 
      { 
       if(strOtherData[count] != null) 
       { 
        strOtherData[count] += "," + n; 
       } 
       else 
       { 
        strOtherData[count] = "" + n; 
       } 
       count++; 
      } 
    } 
    } 
Verwandte Themen