hcn_divisible_by_2^n.pl 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # Date: 02 July 2019
  4. # https://github.com/trizen
  5. # Find highly composite numbers H(n) divisible by 2^k, for k={1,2,3,...}
  6. # Known values of n:
  7. # 2, 3, 6, 8, 21, 23, 50, 105, 143, 221, 634, 770, 1197, 2996, 5489, 7129, 18673, 25236, 46246, 96437, 179480, 298091, 425614
  8. # See also:
  9. # https://oeis.org/A072847
  10. use 5.020;
  11. use strict;
  12. use warnings;
  13. use Math::GMPz;
  14. use ntheory qw(:all);
  15. use IO::Uncompress::Bunzip2;
  16. use experimental qw(signatures declared_refs);
  17. local $| = 1;
  18. prime_precalc(1e7);
  19. sub primorial_inflation ($n) {
  20. state %primorial;
  21. my $tmp = Math::GMPz->new(1);
  22. my $prod = Math::GMPz->new(1);
  23. foreach my \@pp(factor_exp($n)) {
  24. my ($p, $e) = @pp;
  25. my $prim = $primorial{$p} //= do {
  26. my $z = Math::GMPz::Rmpz_init_nobless();
  27. Math::GMPz::Rmpz_primorial_ui($z, $p);
  28. $z;
  29. };
  30. if ($e > 1) {
  31. Math::GMPz::Rmpz_pow_ui($tmp, $prim, $e);
  32. Math::GMPz::Rmpz_mul($prod, $prod, $tmp);
  33. }
  34. else {
  35. Math::GMPz::Rmpz_mul($prod, $prod, $prim);
  36. }
  37. }
  38. return $prod;
  39. }
  40. # "HCN.bz2" was generated by Achim Flammenkamp, and is available at:
  41. # http://wwwhomes.uni-bielefeld.de/achim/HCN.bz2
  42. # "HCN_primorial_deflated.txt.bz2" is a primorial deflation of each highly composite number H(n) from "HCN.bz2", such that A108951(A181815(H(n))) = H(n).
  43. my $z = IO::Uncompress::Bunzip2->new("HCN_primorial_deflated.txt.bz2");
  44. my $n = 1;
  45. while (defined(my $line = $z->getline())) {
  46. chomp($line);
  47. my $hcn = primorial_inflation($line);
  48. if (Math::GMPz::Rmpz_scan1($hcn, 0) == $n) {
  49. print $., ", ";
  50. ++$n;
  51. }
  52. }