>>192
OK、書き直してみた

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;
}