Brilliant and Achilles numbers
Weekly challenge 169 — 13 June 2022
Week 169: 13 Jun 2022
Write a script to generate first 20 Brilliant Numbers. Brilliant numbers are numbers with exactly two prime factors with the same number of digits.
Example 1: 24287 = 149 x 163 Example 2: 24289 = 107 x 227
The criteria for brilliant numbers sound easy to met. For example, there are 21 2-digit prime numbers, yielding 231 brilliant numbers ranging from 441 to 9409, so they're not rare.
The ever-helpful Math::Prime::Util
has a function factor($n)
which returns a list of prime factors of its argument, so the algorithm looks like this:
$test
from 1 to something big until we've found 20 brilliant numbers
$test
$test
unless pf contains exactly 2 same-length members
$test
is brilliantThat generates the desired 20 numbers in microseconds, 2000 in under a second and 20 000 in under 15 seconds on my lowly Raspberry Pi. The 20 000th brilliant number is 2733299, which is 1117 x 2447.
#!/usr/bin/perl # Peter Campbell Smith - 2022-06-13 # PWC 169 task 1 use v5.28; use strict; use warnings; use utf8; use Math::Prime::Util qw[factor]; my ($test, @pf, @result, $count, $j, $j_max); # loop till done $j = 0; for ($test = 1, $count = 0; $count < 20; $test ++) { @pf = factor($test); # test for brilliance next unless (scalar @pf == 2 and length($pf[0]) == length($pf[1])); # accumulate answers $result[$j ++] = $test; $count ++; } # tell the world for ($j = 0; $j < @result; $j ++) { print $result[$j]; print ', ' unless $j == @result - 1; say '' if $j % 10 == 9; }
4, 6, 9, 10, 14, 15, 21, 25, 35, 49, 121, 143, 169, 187, 209, 221, 247, 253, 289, 299
Any content of this website which has been created by Peter Campbell Smith is in the public domain