Primorials and
Kronecker products
Weekly challenge 170 — 20 June 2022
Week 170: 20 Jun 2022
Write a script to generate first 10 Primorial Numbers. Primorial numbers are those formed by multiplying successive prime numbers.
Example 1: P(0) = 1 (1) P(1) = 2 (1×2) P(2) = 6 (1×2×3) P(3) = 30 (1×2×3×5) P(4) = 210 (1×2×3×5×7)
I am always amazed at the way mathematicians find a meaning or a use for obscure sequences and mathematical operations. And here's another one: primorial P(n) is defined as the product of the first n prime numbers. That is true whether or not you accept 1 as the first prime, but apparently P(0) is 1 which neatly sidesteps that argument.
It's easy to see that successive primorials increase fast. We are asked to generate the first 10, and P(9) is already over 223 million, and after that we are quickly into BigInt territory.
As this is a relatively simple task I chose to generate the primes rather than using a module and my algorithm looks like this:
I'm sure someone will come with a one-liner for this, but as always I tend to prioritise lucidity over brevity.
#!/usr/bin/perl # Peter Campbell Smith - 2022-06-20 # PWC 170 task 1 use v5.28; use strict; use warnings; use utf8; binmode(STDOUT, ':utf8'); my (@primes, $j, $p, @pm, $k, $explain); @primes = (); $p = 1; $pm[0] = 1; $explain = ''; say qq[P(0) = 1]; OUTER: for $j (2 .. 99999) { for $k (@primes) { next OUTER if $j % $k == 0; # $j is not prime if divisible by a smaller prime } # found a prime, create next primorial push @primes, $j; $pm[$p] = $pm[$p - 1] * $j; $explain .= qq[$j × ]; printf("P(%d) = %d (%s)\n", $p, $pm[$p], substr($explain, 0, -3)); $p ++; exit if $p == 10; }
P(0) = 1 P(1) = 2 (2) P(2) = 6 (2 × 3) P(3) = 30 (2 × 3 × 5) P(4) = 210 (2 × 3 × 5 × 7) P(5) = 2310 (2 × 3 × 5 × 7 × 11) P(6) = 30030 (2 × 3 × 5 × 7 × 11 × 13) P(7) = 510510 (2 × 3 × 5 × 7 × 11 × 13 × 17) P(8) = 9699690 (2 × 3 × 5 × 7 × 11 × 13 × 17 × 19) P(9) = 223092870 (2 × 3 × 5 × 7 × 11 × 13 × 17 × 19 × 23)
Any content of this website which has been created by Peter Campbell Smith is in the public domain