0193仕様書無しさん
2018/07/21(土) 23:48:50.42OK、書き直してみた
boolean isPrime(int target) {
return !primes(target, target).isEmpty();
}
List<Integer> primes(int betweenFrom, int betweenTo) {
Map<Integer, Integer> furui = new HashMap<>();
List<Integer> result = new ArrayList<>();
int i = 2;
if (i >= betweenFrom && i <= betweenTo) result.add(2);
for (i=3; i <=betweenTo; i+=2) {
Integer step = furui.get(i);
if (step == null) {
if (i >= betweenFrom) result.add(i);
step = i*2;
}
int nextNonPrime = i;
do nextNonPrime += step;
while (furui.containsKey(nextNonPrime));
furui.put(nextNonPrime, step);
}
return result;
}