演習として素数カウンターを並列化しようとしています。元のコードをリファクタリングし、長いループを他のものから分離して、並列化できるようにしました。現在、次のコードがあり、見つかった素数を (順番に) 追跡し、見つかった素数の数を数える必要があるため、マルチスレッド化は難しそうです。
nthPrime(long n) は、検索する素数の数を取得します。n 番目の素数を返します。count は ArryList です
public static long nthPrime(long n) {
count.add((long) 1);
if (n < 2) {
count.add((long) 3);
return getCount();
}
count.add((long) 3);
if (n == 2) {
return getCount();
}
step = 4;
candidate = 5;
checker(n, step, candidate);
return getCount();
}
private static long checker(long n, int step, long candidate) {
while (count.size() < n) {
if (Checker.isPrime(candidate)) {
// checks the number for possible prime
count.add(candidate);
}
step = 6 - step;
candidate += step;
}
return getCount();
}
これを並列化するために util.concurrent または threading を使用するアイデアはありますか?
ありがとう