commit bd77a7dffff3d7040cb754242a5b92df46a306cd Author: Nilstrieb Date: Sun Jun 6 20:07:12 2021 +0200 java primes diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1b51c85 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*/.idea +.idea +*.iml +*.class +out diff --git a/primes/README.md b/primes/README.md new file mode 100644 index 0000000..6d0a7f9 --- /dev/null +++ b/primes/README.md @@ -0,0 +1,8 @@ +# Primes + +Find all primes from 0 to 10 000 000. +Printing time is not included. + +| Language | Time | +| ---------| -------| +| Java | 1836ms | \ No newline at end of file diff --git a/primes/java/src/DefaultPrimes.java b/primes/java/src/DefaultPrimes.java new file mode 100644 index 0000000..9cb3cac --- /dev/null +++ b/primes/java/src/DefaultPrimes.java @@ -0,0 +1,33 @@ +import java.util.ArrayList; +import java.util.List; + +public class DefaultPrimes implements Primes { + + // (will make the code 15% slower) + @SuppressWarnings("ForLoopReplaceableByForEach") + public List primes(int max) { + List primesList = new ArrayList<>(10000); + + primesList.add(2); + + for (int i = 3; i < max; i++) { //go through all numbers + boolean isPrime = true; + for (int j = 0; j < primesList.size(); j++) { //test each number + int prime = primesList.get(j); + if (prime > Math.sqrt(i)) { + break; + } + if (i % prime == 0) { //i = test number, j = some known prime + isPrime = false; + break; + } + } + + if (isPrime) { + primesList.add(i); + } + } + + return primesList; + } +} diff --git a/primes/java/src/Main.java b/primes/java/src/Main.java new file mode 100644 index 0000000..b5225f7 --- /dev/null +++ b/primes/java/src/Main.java @@ -0,0 +1,25 @@ +import java.util.ArrayList; +import java.util.List; + +public class Main { + public static void main(String[] args) { + Primes primes = new DefaultPrimes(); + List times = new ArrayList<>(); + List values = null; + + for (int i = 0; i < 10; i++) { + System.out.println("iteration " + i + " started"); + long startTime = System.currentTimeMillis(); + values = primes.primes(10_000_000); + long totalTime = System.currentTimeMillis() - startTime; + times.add(totalTime); + } + + double average = times.stream() + .mapToLong(l -> l) + .average() + .getAsDouble(); + + System.out.println("Average time after 10 times: " + average + "ms"); + } +} diff --git a/primes/java/src/Primes.java b/primes/java/src/Primes.java new file mode 100644 index 0000000..37fda0b --- /dev/null +++ b/primes/java/src/Primes.java @@ -0,0 +1,5 @@ +import java.util.List; + +public interface Primes { + List primes(int max); +}