hamming_numbers.pl 524 B

1234567891011121314151617181920212223242526
  1. #!/usr/bin/perl
  2. # Generate the generalized Hamming numbers below a certain limit, given a set of primes.
  3. use 5.020;
  4. use warnings;
  5. use experimental qw(signatures);
  6. sub hamming_numbers ($limit, $primes) {
  7. my @h = (1);
  8. foreach my $p (@$primes) {
  9. foreach my $n (@h) {
  10. if ($n * $p <= $limit) {
  11. push @h, $n * $p;
  12. }
  13. }
  14. }
  15. return \@h;
  16. }
  17. # Example: 5-smooth numbers below 100
  18. my $h = hamming_numbers(100, [2, 3, 5]);
  19. say join(', ', sort { $a <=> $b } @$h);