Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package programming.set7.optimus;
- import acm.program.*;
- import java.lang.reflect.Array;
- import acm.graphics.*;
- public class SieveOfEratosthenes extends ConsoleProgram {
- private int field[];
- private int sum;
- private int n;
- public void run(){
- n = readInt("Please Enter a number >= 2 and <= 20 : ");
- if (n < 2 && n > 20){
- throw new IllegalStateException("This is a non valid number");
- }
- // call the methods
- createArray(n);
- toString();
- }
- /*
- * creates the Array integers between n.
- * start to create with the first index number
- * (remember that Arrays index starting by 0)
- *
- * @param n is the number you have to choice
- *
- * @param getNumber is the number of the index
- *
- * @return the value of the given field
- */
- public void createArray(int n){
- int length = 20;
- // because the index of an Array is starting by 0, thats the reason
- // why we have one field more
- sum = (length - n) -1;
- for (int i = 0; i < sum; i++){
- field[i] = i;
- }
- }
- /*
- * this method return the number of the give field
- */
- public int getNumber(int getNumber){
- return field[getNumber];
- }
- /*
- * checks if the next value is a Prime Number
- * choice the SieveOfEratosthenes algorithm
- */
- public void IsPrimeNumber(){
- // starting by zero because of the first index of an Array
- for (int i = 0; i < sum; i++){
- // gets the value of the index
- int value = getNumber(i);
- // for loop to check
- for (int pointer = 1; pointer <= sum; pointer++){
- int result = (int) Math.pow(value, pointer);
- if (result <= 20){
- for (int number = this.n; number <= sum; number++){
- if(result == getNumber(number)){
- field[number] = 0;
- // break for loop number
- break;
- }
- }
- } else {
- // and continue with the algorithm here
- // because the result is higher then sum
- // this for loop gives the numbers
- for (int y = 0; y <= value -1; y++){
- // <= value because of the last value
- for (int j = 2; j <= value; j++){
- int total = getNumber(y);
- // check if the number is weather existing
- if (total > 0){
- int sumsum = total * j;
- if (sumsum <= 20){
- // because no prime number
- field[sumsum] = 0;
- } else {
- // because the number is out of range
- break;
- }
- }
- }
- }
- // second step of the algorithm
- // check all of numbers they are left over
- for (int k = 5; k <= sum; k++){
- int totaltoal = getNumber(k);
- if (totaltoal > 0){
- int resultresult = totaltoal * 2;
- if (resultresult <= 20){
- field[resultresult] = 0;
- } else {
- // because the next will be also out of range
- break;
- }
- }
- }
- }
- }
- }
- }
- /*
- * overwrite the toString method for output the prime numbers
- */
- public String toString(){
- String s = "";
- IsPrimeNumber();
- // check the Array for validity
- for (int i = this.n; i <= sum; i++){
- int value = getNumber(i);
- if(this.n +1 < sum){
- s += " ";
- }
- if (value > 0){
- s += Integer.toString(i);
- } else {
- s += "_";
- }
- if (i < sum){
- s += ",";
- }
- }
- return s;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement