Honaker primes: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) m (Remove draft tag. Draft for over a year, multiple implementations, little controversy) |
(New post.) |
||
Line 787: | Line 787: | ||
</syntaxhighlight> |
</syntaxhighlight> |
||
⚫ | |||
Task example:<syntaxhighlight lang=J> (>: j. p:) 5 10$I.honk i.1e3 |
Task example:<syntaxhighlight lang=J> (>: j. p:) 5 10$I.honk i.1e3 |
||
32j131 56j263 88j457 175j1039 176j1049 182j1091 212j1301 218j1361 227j1433 248j1571 |
32j131 56j263 88j457 175j1039 176j1049 182j1091 212j1301 218j1361 227j1433 248j1571 |
||
Line 795: | Line 794: | ||
761j5801 767j5843 779j5927 820j6301 821j6311 826j6343 827j6353 847j6553 848j6563 857j6653</syntaxhighlight> |
761j5801 767j5843 779j5927 820j6301 821j6311 826j6343 827j6353 847j6553 848j6563 857j6653</syntaxhighlight> |
||
Here, we test the first thousand primes to see which are prime indices of Honaker primes. Then <code>I.</code>converts the test results back to index form, and <code>5 10$I.</code> organizes those indices in 5 rows of 10 columns (discarding any extra). Finally, we use complex number notation to form pairs of the corresponding honaker index and prime. |
Here, we test the first thousand primes to see which are prime indices of Honaker primes. Then <code>I.</code>converts the test results back to index form, and <code>5 10$I.</code> organizes those indices in 5 rows of 10 columns (discarding any extra). Finally, we use complex number notation to form pairs of the corresponding honaker index and prime. |
||
=={{header|Java}}== |
|||
<syntaxhighlight lang="java"> |
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
import java.util.stream.Collectors; |
|||
import java.util.stream.IntStream; |
|||
public final class HonakerPrimes { |
|||
public static void main(String[] args) { |
|||
sievePrimes(5_000_000); |
|||
System.out.println("The first 50 Honaker primes (honaker index: prime index, prime):"); |
|||
for ( int i = 1; i <= 50; i++ ) { |
|||
System.out.print(String.format("%17s%s", nextHonakerPrime(), ( i % 5 == 0 ? "\n" : " " ) )); |
|||
} |
|||
for ( int i = 51; i < 10_000; i++ ) { |
|||
nextHonakerPrime(); |
|||
} |
|||
System.out.println(); |
|||
System.out.println("The 10,000th Honaker prime is: " + nextHonakerPrime()); |
|||
} |
|||
private static HonakerPrime nextHonakerPrime() { |
|||
honakerIndex += 1; |
|||
primeIndex += 1; |
|||
while ( digitalSum(primeIndex) != digitalSum(primes.get(primeIndex - 1)) ) { |
|||
primeIndex += 1; |
|||
} |
|||
return new HonakerPrime(honakerIndex, primeIndex, primes.get(primeIndex - 1)); |
|||
} |
|||
private static int digitalSum(int number) { |
|||
return String.valueOf(number).chars().map( i -> i - (int) '0' ).sum(); |
|||
} |
|||
private static void sievePrimes(int limit) { |
|||
List<Boolean> markedPrime = IntStream.range(0, limit).boxed().map( i -> true ).collect(Collectors.toList()); |
|||
for ( int p = 2; p * p < limit; p++ ) { |
|||
if ( markedPrime.get(p) ) { |
|||
for ( int i = p * p; i < limit; i += p ) { |
|||
markedPrime.set(i, false); |
|||
} |
|||
} |
|||
} |
|||
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 primeIndex = 0; |
|||
private static List<Integer> primes; |
|||
private static record HonakerPrime(int honakerIndex, int primeIndex, int prime) { |
|||
public String toString() { |
|||
return "(" + honakerIndex + ": " + primeIndex + ", " + prime + ")"; |
|||
} |
|||
} |
|||
} |
|||
⚫ | |||
{{ out }} |
|||
<pre> |
|||
The first 50 Honaker primes (honaker index: prime index, prime): |
|||
(1: 32, 131) (2: 56, 263) (3: 88, 457) (4: 175, 1039) (5: 176, 1049) |
|||
(6: 182, 1091) (7: 212, 1301) (8: 218, 1361) (9: 227, 1433) (10: 248, 1571) |
|||
(11: 293, 1913) (12: 295, 1933) (13: 323, 2141) (14: 331, 2221) (15: 338, 2273) |
|||
(16: 362, 2441) (17: 377, 2591) (18: 386, 2663) (19: 394, 2707) (20: 397, 2719) |
|||
(21: 398, 2729) (22: 409, 2803) (23: 439, 3067) (24: 446, 3137) (25: 457, 3229) |
|||
(26: 481, 3433) (27: 499, 3559) (28: 508, 3631) (29: 563, 4091) (30: 571, 4153) |
|||
(31: 595, 4357) (32: 599, 4397) (33: 635, 4703) (34: 637, 4723) (35: 655, 4903) |
|||
(36: 671, 5009) (37: 728, 5507) (38: 751, 5701) (39: 752, 5711) (40: 755, 5741) |
|||
(41: 761, 5801) (42: 767, 5843) (43: 779, 5927) (44: 820, 6301) (45: 821, 6311) |
|||
(46: 826, 6343) (47: 827, 6353) (48: 847, 6553) (49: 848, 6563) (50: 857, 6653) |
|||
The 10,000th Honaker prime is: (10000: 286069, 4043749) |
|||
</pre> |
|||
=={{header|jq}}== |
=={{header|jq}}== |