a.pl 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # Date: 16 May 2019
  4. # https://github.com/trizen
  5. # Generate the smallest extended Chernick-Carmichael number with n prime factors.
  6. # OEIS sequence:
  7. # https://oeis.org/A318646 -- The least Chernick's "universal form" Carmichael number with n prime factors.
  8. # See also:
  9. # https://oeis.org/wiki/Carmichael_numbers
  10. # http://www.ams.org/journals/bull/1939-45-04/S0002-9904-1939-06953-X/home.html
  11. use 5.020;
  12. use warnings;
  13. use ntheory qw(:all);
  14. use experimental qw(signatures);
  15. # Generate the factors of a Chernick-Carmichael number
  16. sub chernick_carmichael_factors ($n, $m) {
  17. (6*$m + 1, 12*$m + 1, (map { (1 << $_) * 9*$m + 1 } 1 .. $n-2));
  18. }
  19. # Check the conditions for an extended Chernick-Carmichael number
  20. sub is_chernick_carmichael ($n, $m) {
  21. ($n == 2) ? (is_prime(6*$m + 1) && is_prime(12*$m + 1))
  22. : (is_prime((1 << ($n-2)) * 9*$m + 1) && __SUB__->($n-1, $m));
  23. }
  24. # Find the smallest Chernick-Carmichael number with n prime factors.
  25. sub chernick_carmichael_number ($n, $callback) {
  26. my $multiplier = ($n > 4) ? 5*(1 << ($n-4)) : 1;
  27. # 10026206862
  28. # 48474353315
  29. # k = 24237176657 (for n = 12)
  30. # m = 31023586121600 (for n = 11)
  31. # m = 3208386195840 (for n = 10)
  32. for (my $k = 40237176657 - 1e7; $k <= 40237176657 ; ++$k) {
  33. if (is_chernick_carmichael($n, $k * $multiplier)) {
  34. $callback->(chernick_carmichael_factors($n, $k * $multiplier));
  35. last;
  36. }
  37. }
  38. }
  39. foreach my $n (12) {
  40. chernick_carmichael_number($n, sub (@f) { say "a($n) = ", vecprod(@f) });
  41. }
  42. __END__
  43. a(3) = 1729
  44. a(4) = 63973
  45. a(5) = 26641259752490421121
  46. a(6) = 1457836374916028334162241
  47. a(7) = 24541683183872873851606952966798288052977151461406721
  48. a(8) = 53487697914261966820654105730041031613370337776541835775672321
  49. a(9) = 58571442634534443082821160508299574798027946748324125518533225605795841