import java.util.function.*;
import java.util.stream.*;
public class Primes{
public static <T> long measurePerformance(Supplier<T> action){
long fastest = Long.MAX_VALUE;
for (int i = 0; i < 5; i++) {
long start = System.nanoTime();
System.out.print(action.get() + " ");
long duration = (System.nanoTime() - start) / 1_000_000; // mili seconds
if (duration < fastest) fastest = duration;
}
System.out.println("\nMin Duration = " + fastest + " msecs");
return fastest;
}
public static boolean isPrimeIterative(long nr){
for(long i = 2; i < nr; i++)
if(nr%i == 0)
return false;
return true;
}
public static boolean isPrimeStream(long nr){
/*
return IntStream.range(2, nr)
.filter(i -> nr%i == 0)
.findAny()
.isPresent();
*/
return LongStream.range(2, nr)
.parallel()
.noneMatch(i -> nr%i == 0);
}
public static void main(String [] args){
measurePerformance(() -> isPrimeStream(179_424_673));
measurePerformance(() -> isPrimeIterative(179_424_673));
}
}