Skip to content

Instantly share code, notes, and snippets.

@deyindra
Created May 15, 2016 03:31
Show Gist options
  • Save deyindra/dd48190ece784518e9713b4c96de8903 to your computer and use it in GitHub Desktop.
Save deyindra/dd48190ece784518e9713b4c96de8903 to your computer and use it in GitHub Desktop.
PrimeNumberIterator
package org.idey.algo.iterator.generic;
import java.util.BitSet;
import java.util.Iterator;
import java.util.NoSuchElementException;
public class PrimeNumberIterator implements Iterator<Integer>{
private int upperLimit;
private BitSet bitSet;
private int nextNumber;
public PrimeNumberIterator(int upperLimit) {
this.upperLimit = upperLimit;
bitSet = new BitSet(upperLimit);
bitSet.set(0,false);
bitSet.set(1, false);
bitSet.set(2, upperLimit, true);
nextNumber=2;
setAdvance();
}
private void setAdvance() {
while (nextNumber<=upperLimit){
boolean isPrime = bitSet.get(nextNumber);
if(isPrime){
for(int j=2;j*nextNumber<=upperLimit;j++){
bitSet.set(j*nextNumber,false);
}
break;
}else{
nextNumber++;
}
}
}
@Override
public boolean hasNext() {
return nextNumber<=upperLimit;
}
@Override
public Integer next() {
if(!hasNext()){
throw new NoSuchElementException();
}
int prevNextNumber = nextNumber;
nextNumber++;
setAdvance();
return prevNextNumber;
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment