ユーザーが指定した範囲内のすべての素数を計算するプログラムを作成しようとしています。ただし、私の方法では、2から指定された範囲までのすべての数値を取得し続けるため、素数の取得が適切に機能していません。どうすればそれを修正できるかについてのアドバイスはありますか?
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class Sieve
{
private int number;
public Sieve (int maxPrime)
{
number = maxPrime;
}
public Set<Integer> getPrimes()
{
Set<Integer> setNumbers = new TreeSet<Integer>();
for(int i=2; i<=number; i++)
{
setNumbers.add(i);
}
Iterator<Integer> iter = setNumbers.iterator();
boolean isTrue=false;
while (iter.hasNext()) //WHILE number is more than one
{
int number1= iter.next();
for (int i =2; i<= Math.sqrt(number); i++)
if (number1 % i == 0)
{
isTrue = true;
break;
}
} // end while
if(isTrue)
{
iter.remove();
}
return setNumbers;
}
}
ちなみに、ここでテスターを作成したので、プログラムが機能するかどうかをテストできます。
import java.util.Set;
public class PrimeTest
{
public static void main(String[] args)
{
Sieve sifter = new Sieve(100);
Set<Integer> primes = sifter.getPrimes();
System.out.println(primes);
System.out.println("Expected: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 43, 41, 47, 53, 59, 61, 71, 67, 79, 73, 83, 89, 97]");
}
}