Honaker primes: Difference between revisions
Content added Content deleted
(New post without using external libraries, in addition to an existing post which uses the "Primesieve" lexternal ibrary.) |
m (Minor code improvement.) |
||
Line 883: | Line 883: | ||
import java.util.ArrayList; |
import java.util.ArrayList; |
||
import java.util.List; |
import java.util.List; |
||
import java.util.stream.Collectors; |
|||
import java.util.stream.IntStream; |
|||
public final class HonakerPrimes { |
public final class HonakerPrimes { |
||
Line 913: | Line 911: | ||
private static int digitalSum(int number) { |
private static int digitalSum(int number) { |
||
return String.valueOf(number).chars().map( i -> i - (int) '0' ).sum(); |
return String.valueOf(number).chars().map( i -> i - (int) '0' ).sum(); |
||
} |
} |
||
⚫ | |||
private static void sievePrimes(int limit) { |
private static void sievePrimes(int limit) { |
||
⚫ | |||
List<Boolean> markedPrime = IntStream.range(0, limit).boxed().map( i -> true ).collect(Collectors.toList()); |
|||
final int halfLimit = ( limit + 1 ) / 2; |
|||
boolean[] composite = new boolean[halfLimit]; |
|||
if ( markedPrime.get(p) ) { |
|||
for ( int i = 1, p = 3; i < halfLimit; p += 2, i++ ) { |
|||
if ( ! composite[i] ) { |
|||
markedPrime.set(i, false); |
|||
primes.add(p); |
|||
} |
|||
for ( int a = i + p; a < halfLimit; a += p ) { |
|||
composite[a] = true; |
|||
} |
|||
} |
|||
} |
|||
primes = new ArrayList<Integer>(); |
|||
} |
|||
for ( int p = 2; p < limit; p++ ) { |
|||
⚫ | |||
if ( markedPrime.get(p) ) { |
|||
⚫ | |||
} |
|||
} |
|||
} |
|||
private static int honakerIndex = 0; |
private static int honakerIndex = 0; |
||
private static int primeIndex = 0; |
private static int primeIndex = 0; |
||
private static List<Integer> primes; |
private static List<Integer> primes = new ArrayList<Integer>(); |
||
private static record HonakerPrime(int honakerIndex, int primeIndex, int prime) { |
private static record HonakerPrime(int honakerIndex, int primeIndex, int prime) { |