/* Nathaniel Lim
* CS334 - HW 10
*/
public class Sieve extends Thread {
private Buffer<Integer> in;
public Sieve (Buffer<Integer> in){
this.in = in;
}
public static void main(String args[]) {
if (args.length == 1){
String input = args[0];
int n = Integer.parseInt(input);
System.out.println("Sieve starting from 2 to " + n);
Buffer<Integer> buffer = new Buffer<Integer>(5);
Sieve s = new Sieve(buffer);
s.start();
try {
for (int i = 2; i <= n; i++){
buffer.insert(new Integer(i));
}
buffer.insert(new Integer(-1));
} catch(InterruptedException e){
System.out.println("Something was interrupted!");
}
} else {
System.out.println("Just give the number n, denoting the upper limit to the Sieve");
}
}
public void run() {
try {
Integer first = in.delete();
int firstNum = first.intValue();
if (firstNum < 0){
return;
} else {
System.out.println(first.intValue());
Buffer<Integer> out = new Buffer<Integer>(5);
Sieve nextSieve = new Sieve(out);
nextSieve.start();
Integer next = in.delete();
while (next.intValue() >= 0){
if (next.intValue() % firstNum != 0){
out.insert(next);
}
next = in.delete();
}
//Insert the negative number
out.insert(next);
return;
}
} catch (InterruptedException e){
System.out.println("Something was interrupted!");
}
}
}