Guest User

Untitled

a guest
May 23rd, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.03 KB | None | 0 0
  1. public class Eratosthenes {
  2.  
  3.  
  4. /*
  5. * Die Obergrenze für das Sieben wird durch den Parameter grenze bestimmt.
  6. * Ist er ungueltig (grenze < 2), so wird null zurueckgeliefert.
  7. * grenze ist in den Test eingeschlossen, d.h. getestet wird das Intervall [2; grenze].
  8. * Die Rueckgabe der Methode ist die Liste der „Streichungen“ als Array. Wurde die Zahl i
  9. * gestrichen, so ist der Wert des Arrays an Stelle i gleich true.
  10. */
  11. public static boolean[] siebe(int grenze) {
  12. if (grenze > 1) {
  13. boolean[] liste = erzeugeListe(grenze + 1);
  14. if (grenze <= 2) {
  15. return liste;
  16. }
  17. int y = 2;
  18. while (y * y < grenze) {
  19. y = findeKleinsteUngestricheneZahl(y, liste);
  20. streicheVielfache(y, liste);
  21. y++;
  22. }
  23. return liste;
  24. } else
  25. return null;
  26. }
  27.  
  28.  
  29. /*
  30. * Diese Methode erzeugt die Liste fuer die Streichungen in der passenden Groesse
  31. * und streicht die Zahlen 0 und 1 vorab. Fuer unzulaessige Eingaben (groesse < 2) liefert
  32. * die Methode null zurück.
  33. */
  34. public static boolean[] erzeugeListe(int groesse) {
  35. if(groesse > 2) {
  36. boolean[] liste = new boolean[groesse];
  37. java.util.Arrays.fill(liste, false);
  38. liste[0] = true;
  39. liste[1] = true;
  40. return liste;
  41. } else {
  42. boolean[] liste = new boolean[groesse];
  43. java.util.Arrays.fill(liste, true);
  44. return liste;
  45. }
  46. }
  47.  
  48. /*
  49. * Diese Methode streicht die Vielfachen der Zahl zahl bis zur Obergrenze im Array liste.
  50. * Ist der Parameter zahl unzulaessig (zahl kleiner 1 oder zahl groesser als die Obergrenze),
  51. * so bleibt die Liste unveraendert.
  52. */
  53. public static void streicheVielfache(int zahl, boolean[] liste) {
  54. int i = 2;
  55. int x = 0;
  56. while (zahl * i < liste.length) {
  57. x = zahl * i;
  58. liste[x] = true;
  59. i = i + 1;
  60. }
  61. }
  62.  
  63. /*
  64. * Diese Methode gibt die kleinste ungestrichene Zahl in der Liste zurueck, die groeßer als beginn
  65. * ist. Enthaelt die Liste keine solche Zahl, wird die Obergrenze zurueckgegeben, bei unzulässigen Eingaben
  66. * ist -1 der Rückgabewert.
  67. */
  68. public static int findeKleinsteUngestricheneZahl(int beginn, boolean[] liste) {
  69. while ((liste[beginn] != false) & (beginn < liste.length)) {
  70. beginn = beginn + 1;
  71. }
  72. return beginn;
  73. }
  74.  
  75.  
  76. /*
  77. * main-Methode
  78. */
  79. public static void main(String[] args) {
  80. outputPrimes(erzeugeListe(1));
  81.  
  82. }
  83.  
  84.  
  85. /*
  86. * Hilfsmethode zur Ausgabe der Primzahlen
  87. */
  88. private static void outputPrimes(boolean[] result) {
  89.  
  90. if (result == null) return;
  91.  
  92. for (int i = 0; i < result.length; i++) {
  93. if (!result[i]) System.out.print(i + " ");
  94. }
  95.  
  96. System.out.println();
  97. }
  98.  
  99.  
  100. }
Add Comment
Please, Sign In to add comment