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) {
primes.add(2);
List<Boolean> markedPrime = IntStream.range(0, limit).boxed().map( i -> true ).collect(Collectors.toList());
for ( int p = 2; p * p < limit; p++ ) {
final int halfLimit = ( limit + 1 ) / 2;
boolean[] composite = new boolean[halfLimit];
if ( markedPrime.get(p) ) {
for ( int i = p * p; i < limit; i += 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) ) {
primes.add(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) {