orig.pl 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # Date: 22 July 2018
  4. # https://github.com/trizen
  5. # Generate all the extended Chernick's Carmichael numbers bellow a certain limit.
  6. # OEIS sequences:
  7. # https://oeis.org/A317126
  8. # https://oeis.org/A317136
  9. # See also:
  10. # https://oeis.org/wiki/Carmichael_numbers
  11. # http://www.ams.org/journals/bull/1939-45-04/S0002-9904-1939-06953-X/home.html
  12. use 5.020;
  13. use warnings;
  14. use ntheory qw(:all);
  15. use experimental qw(signatures);
  16. # Generate the factors of a Chernick number, given n
  17. # and m, where n is the number of distinct prime factors.
  18. sub chernick_carmichael_factors ($n, $m) {
  19. (6*$m + 1, 12*$m + 1, (map { (1 << $_) * 9*$m + 1 } 1 .. $n-2));
  20. }
  21. # Check the conditions for an extended Chernick-Carmichael number
  22. sub is_chernick_carmichael ($n, $m) {
  23. ($n == 2) ? (is_prime(6*$m + 1) && is_prime(12*$m + 1))
  24. : (is_prime((1 << ($n-2)) * 9*$m + 1) && __SUB__->($n-1, $m));
  25. }
  26. say vecprod(chernick_carmichael_factors(8, 977042880));
  27. __END__
  28. while (<DATA>) {
  29. my ($n, $m) = /\[(\d+), (\d+)\]/;
  30. foreach my $k(-1..5) {
  31. if (is_chernick_carmichael($n+$k, $m)) {
  32. my $t = vecprod(chernick_carmichael_factors($n+$k, $m));
  33. if (not is_carmichael($t)) {
  34. #die "error for [$n, $m, $k]";
  35. next;
  36. }
  37. say $t;
  38. }
  39. }
  40. }
  41. exit;
  42. my @terms;
  43. my $limit = 0 + ($ARGV[0] // 10**50);
  44. # Generate terms with k distict prime factors
  45. for (my $n = 8 ; ; ++$n) {
  46. # We can stop the search when:
  47. # (6*m + 1) * (12*m + 1) * Product_{i=1..n-2} (9 * 2^i * m + 1)
  48. # is greater than the limit, for m=1.
  49. #~ last if vecprod(chernick_carmichael_factors($n, 1)) > $limit;
  50. # Set the multiplier, based on the condition that `m` has to be divisible by 2^(k-4).
  51. my $multiplier = ($n > 4) ? 5*(1 << ($n-4)) : 1;
  52. # Generate the extended Chernick numbers with n distinct prime factors,
  53. # that are also Carmichael numbers, bellow the limit we're looking for.
  54. for (my $k = 1 ; ; ++$k) {
  55. my $m = $multiplier * $k;
  56. # All factors must be prime
  57. is_chernick_carmichael($n, $m) || next;
  58. say "Found: [$n, $m]";
  59. if ($n > 4 and $m % 5 != 0) {
  60. say "Counter-example for: [$n, $m]";
  61. }
  62. #~ exit if ($m == 532910560);
  63. # Get the prime factors
  64. #my @f = chernick_carmichael_factors($n, $m);
  65. # The product of these primes, gives a Carmichael number
  66. #my $c = vecprod(@f);
  67. #last if $c > $limit;
  68. #push @terms, $c;
  69. }
  70. }
  71. __END__
  72. Found: [8, 950560]
  73. Found: [8, 107675360]
  74. Found: [8, 461417840]
  75. Found: [8, 532910560]
  76. Found: [8, 977042880]
  77. Found: [8, 1411396800]
  78. Found: [8, 1708622400]
  79. Found: [8, 3738359200]
  80. Found: [8, 5680753920]
  81. Found: [8, 7533666800]
  82. Found: [8, 8105474400]
  83. Found: [8, 10072824720]
  84. Found: [8, 13507401600]
  85. Found: [8, 13692143920]
  86. Found: [8, 16557166080]
  87. Found: [8, 17265627920]
  88. Found: [8, 20095081120]
  89. Found: [8, 20157429040]
  90. Found: [8, 20287336960]
  91. Found: [8, 21965599040]
  92. Found: [8, 22446071760]
  93. Found: [8, 26262063520]
  94. Found: [8, 28440427360]
  95. Found: [8, 32222385680]
  96. Found: [8, 32644863440]
  97. Found: [8, 33765790240]
  98. Found: [8, 35952282480]
  99. Found: [8, 36584675920]
  100. Found: [8, 36640979760]
  101. Found: [8, 40120776080]
  102. Found: [8, 40752538640]
  103. Found: [8, 41391963760]
  104. Found: [8, 44966320240]
  105. Found: [8, 45309550400]
  106. Found: [8, 46714920000]
  107. Found: [8, 48020463920]
  108. Found: [8, 49352568720]
  109. Found: [8, 49457850400]
  110. Found: [8, 50459253840]
  111. Found: [8, 51286630880]
  112. Found: [8, 51422560800]
  113. Found: [8, 57468324480]
  114. Found: [8, 58737657440]
  115. Found: [8, 60160226240]
  116. Found: [8, 60448468080]
  117. Found: [8, 60918053840]
  118. Found: [8, 62555045280]
  119. Found: [8, 63113366960]
  120. Found: [8, 65890692560]
  121. Found: [8, 67324129600]
  122. Found: [8, 68473583360]
  123. Found: [8, 69131431600]
  124. Found: [8, 75562470160]
  125. Found: [8, 76867834960]
  126. Found: [8, 77073929200]
  127. Found: [8, 77326805040]
  128. Found: [8, 79444077440]
  129. Found: [8, 80483255120]
  130. Found: [8, 80886029280]
  131. Found: [8, 81906331920]
  132. Found: [8, 83038210640]
  133. Found: [8, 83552384400]
  134. Found: [8, 83720196560]
  135. Found: [8, 86639577600]