Advertisement
Guest User

Untitled

a guest
Dec 16th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.91 KB | None | 0 0
  1. package programming.set7.optimus;
  2. import acm.program.*;
  3.  
  4. import java.lang.reflect.Array;
  5.  
  6. import acm.graphics.*;
  7.  
  8. public class SieveOfEratosthenes extends ConsoleProgram {
  9.  
  10. private int field[];
  11. private int sum;
  12. private int n;
  13.  
  14. public void run(){
  15.  
  16. n = readInt("Please Enter a number >= 2 and <= 20 : ");
  17.  
  18. if (n < 2 && n > 20){
  19. throw new IllegalStateException("This is a non valid number");
  20. }
  21.  
  22. // call the methods
  23. createArray(n);
  24.  
  25. toString();
  26.  
  27. }
  28.  
  29. /*
  30. * creates the Array integers between n.
  31. * start to create with the first index number
  32. * (remember that Arrays index starting by 0)
  33. *
  34. * @param n is the number you have to choice
  35. *
  36. * @param getNumber is the number of the index
  37. *
  38. * @return the value of the given field
  39. */
  40.  
  41. public void createArray(int n){
  42.  
  43. int length = 20;
  44. // because the index of an Array is starting by 0, thats the reason
  45. // why we have one field more
  46. sum = (length - n) -1;
  47.  
  48. for (int i = 0; i < sum; i++){
  49. field[i] = i;
  50. }
  51. }
  52.  
  53.  
  54. /*
  55. * this method return the number of the give field
  56. */
  57. public int getNumber(int getNumber){
  58. return field[getNumber];
  59. }
  60.  
  61. /*
  62. * checks if the next value is a Prime Number
  63. * choice the SieveOfEratosthenes algorithm
  64. */
  65. public void IsPrimeNumber(){
  66.  
  67. // starting by zero because of the first index of an Array
  68. for (int i = 0; i < sum; i++){
  69.  
  70. // gets the value of the index
  71. int value = getNumber(i);
  72.  
  73. // for loop to check
  74. for (int pointer = 1; pointer <= sum; pointer++){
  75.  
  76. int result = (int) Math.pow(value, pointer);
  77.  
  78. if (result <= 20){
  79.  
  80. for (int number = this.n; number <= sum; number++){
  81.  
  82. if(result == getNumber(number)){
  83. field[number] = 0;
  84. // break for loop number
  85. break;
  86. }
  87. }
  88. } else {
  89. // and continue with the algorithm here
  90. // because the result is higher then sum
  91.  
  92. // this for loop gives the numbers
  93. for (int y = 0; y <= value -1; y++){
  94.  
  95. // <= value because of the last value
  96. for (int j = 2; j <= value; j++){
  97.  
  98. int total = getNumber(y);
  99.  
  100. // check if the number is weather existing
  101. if (total > 0){
  102. int sumsum = total * j;
  103.  
  104. if (sumsum <= 20){
  105. // because no prime number
  106. field[sumsum] = 0;
  107. } else {
  108. // because the number is out of range
  109. break;
  110. }
  111. }
  112. }
  113. }
  114.  
  115. // second step of the algorithm
  116. // check all of numbers they are left over
  117.  
  118. for (int k = 5; k <= sum; k++){
  119. int totaltoal = getNumber(k);
  120.  
  121. if (totaltoal > 0){
  122. int resultresult = totaltoal * 2;
  123.  
  124. if (resultresult <= 20){
  125. field[resultresult] = 0;
  126. } else {
  127. // because the next will be also out of range
  128. break;
  129. }
  130. }
  131. }
  132. }
  133. }
  134. }
  135. }
  136.  
  137. /*
  138. * overwrite the toString method for output the prime numbers
  139. */
  140. public String toString(){
  141. String s = "";
  142. IsPrimeNumber();
  143.  
  144. // check the Array for validity
  145. for (int i = this.n; i <= sum; i++){
  146. int value = getNumber(i);
  147.  
  148. if(this.n +1 < sum){
  149. s += " ";
  150. }
  151.  
  152. if (value > 0){
  153. s += Integer.toString(i);
  154. } else {
  155. s += "_";
  156. }
  157.  
  158. if (i < sum){
  159. s += ",";
  160. }
  161. }
  162. return s;
  163. }
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement