Guest User

Untitled

a guest
May 23rd, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.43 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. }return liste;} else
  23. return null;
  24. }
  25.  
  26.  
  27. /*
  28. * Diese Methode erzeugt die Liste fuer die Streichungen in der passenden Groesse
  29. * und streicht die Zahlen 0 und 1 vorab. Fuer unzulaessige Eingaben (groesse < 2) liefert
  30. * die Methode null zurück.
  31. */
  32. public static boolean[] erzeugeListe(int groesse) {
  33. boolean[] liste = new boolean[groesse];
  34. java.util.Arrays.fill(liste,false);
  35. liste[0] = true;
  36. liste[1] = true;
  37. return liste;
  38. }
  39.  
  40. /*
  41. * Diese Methode streicht die Vielfachen der Zahl zahl bis zur Obergrenze im Array liste.
  42. * Ist der Parameter zahl unzulaessig (zahl kleiner 1 oder zahl groesser als die Obergrenze),
  43. * so bleibt die Liste unveraendert.
  44. */
  45. public static void streicheVielfache(int zahl, boolean[] liste) {
  46. int i = 2;
  47. int x = 0;
  48. while (zahl * i < liste.length) {
  49. x = zahl * i;
  50. liste[x] = true;
  51. i = i + 1;
  52. }
  53. }
  54.  
  55. /*
  56. * Diese Methode gibt die kleinste ungestrichene Zahl in der Liste zurueck, die groeßer als beginn
  57. * ist. Enthaelt die Liste keine solche Zahl, wird die Obergrenze zurueckgegeben, bei unzulässigen Eingaben
  58. * ist -1 der Rückgabewert.
  59. */
  60. public static int findeKleinsteUngestricheneZahl(int beginn, boolean[] liste) {
  61. while ((liste[beginn] != false) & (beginn<liste.length)) {
  62. beginn = beginn + 1;
  63. }
  64. return beginn;
  65. }
  66.  
  67.  
  68. /*
  69. * main-Methode
  70. */
  71. public static void main(String[] args) {
  72. outputPrimes(siebe(8004));
  73. outputPrimes(siebe(49));
  74. outputPrimes(siebe(2));
  75. outputPrimes(siebe(997));
  76.  
  77. }
  78.  
  79.  
  80. /*
  81. * Hilfsmethode zur Ausgabe der Primzahlen
  82. */
  83. private static void outputPrimes(boolean[] result) {
  84.  
  85. if (result == null)
  86. return;
  87.  
  88. for (int i = 0; i < result.length; i++) {
  89. if (!result[i])
  90. System.out.print(i + " ");
  91. }
  92.  
  93. System.out.println();
  94. }
  95.  
  96.  
  97. }
Add Comment
Please, Sign In to add comment