checks every second number

This commit is contained in:
CORR1T 2021-06-07 15:38:06 +02:00
parent dfce13e6bc
commit 12ec3b5d1b
2 changed files with 9 additions and 6 deletions

View file

@ -6,15 +6,16 @@ public class DefaultPrimes implements Primes {
// (will make the code 15% slower)
@SuppressWarnings("ForLoopReplaceableByForEach")
public List<Integer> primes(int max) {
List<Integer> primesList = new ArrayList<>(10000);
List<Integer> primesList = new ArrayList<>(max);
primesList.add(2);
for (int i = 3; i < max; i++) { //go through all numbers
for (int i = 3; i < max; i += 2) { //go through all numbers
boolean isPrime = true;
double sqrRoot = Math.sqrt(i);
for (int j = 0; j < primesList.size(); j++) { //test each number
int prime = primesList.get(j);
if (prime > Math.sqrt(i)) {
if (prime >= sqrRoot) {
break;
}
if (i % prime == 0) { //i = test number, j = some known prime

View file

@ -24,9 +24,10 @@ fn primes(max: u32) -> Vec<u32> {
primes_list.push(2);
for i in 3..max { //go through all numbers
for mut i in 3..max {
let sqr_root: u32 = (i as f64).sqrt() as u32;
for prime in &primes_list { //test each number
if *prime > (i as f64).sqrt() as u32 {
if *prime > sqr_root {
primes_list.push(i);
break;
}
@ -34,7 +35,8 @@ fn primes(max: u32) -> Vec<u32> {
break;
}
}
i += 1;
}
return primes_list;
primes_list
}