comb_cyclic_2.pl 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. #!/usr/bin/perl
  2. use 5.020;
  3. use experimental qw(signatures);
  4. use ntheory qw(forcomb carmichael_lambda divisors is_prime binomial factor euler_phi);
  5. use Math::Prime::Util::GMP qw(is_carmichael vecprod gcd is_pseudoprime);
  6. use List::Util qw(uniq);
  7. #~ 1.8173 record: 64075459460541239985
  8. #~ 1.8274 record: 14370921672011352376545
  9. #~ 1.8670 record: 100724996094964745183793345
  10. #~ 1.8937 record: 5981802520294676451270038145
  11. #~ 1.9103 record: 141934960805533535384100259905
  12. #~ 1.9103 record: 2609668563371076823446624111609234945
  13. #~ 1.9176 record: 871005264581548962932418919531990803260747265
  14. #~ 1.9296 record: 74875990602425226938138664024259158432269224416705
  15. #~ 1.9332 record: 1018329989576989704159754753835889677652405111555820545
  16. #~ 1.9483 record: 165502573617193579886078524884554371013787876466850820614145
  17. #~ 1.9498 record: 14701083488299057530174696885922722686956286485260401577115414785
  18. #~ 1.9540 record: 321030150905393790929751720043602006651739765349595158023943724894346115208705
  19. #my @p = (3, 5, 17, 23, 29, 83, 89, 353, 449);
  20. #my @p = (3, 5, 17, 23, 29);
  21. #my @p = (3, 5, 17, 23, 29);
  22. #my @p = (3, 5, 17, 23, 29, 83, 89);
  23. #my @p = (3, 5, 17, 23, 29, 83, 89, 113, 197, 353, 449, 617);
  24. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 353, 449);
  25. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 449, 617);
  26. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113);
  27. #my @p = (3, 5, 17, 23, 29, 83, 89, 113, 197, 353, 449, 617, 3137);
  28. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 449, 617, 4019, 656657);
  29. #my @p = (3, 5, 17, 23, 29, 53, 83, 89);
  30. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113);
  31. #my @p = (3, 5, 17, 23, 29, 43, 53, 89, 113, 127);
  32. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 257, 353, 617);
  33. #my @p = (3, 5, 17, 23, 29);
  34. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 449, 617);
  35. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 257, 353, 449, 617);
  36. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 1409, 3137, 10193, 16073, 23297, 88397, 896897, 1500929, 18386369);
  37. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 617); # seems promising
  38. #my @p = (3, 5, 17, 23, 29, 53); # seems promising
  39. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 617);
  40. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 257, 353, 617);
  41. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 257, 353, 617, 1409, 2003, 2549, 3137);
  42. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 617);
  43. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 353, 617);
  44. # Cyclic numbers:
  45. # 5074617663820994745
  46. # 2278503331055626640505
  47. # 7606851878067671122755
  48. # 3415476493252384334116995
  49. sub is_cyclic ($n) {
  50. gcd(euler_phi($n), $n) == 1;
  51. }
  52. #my @p = factor("3415476493252384334116995");
  53. #push @p, 83;
  54. my @p = (3, 5, 17, 23, 29, 53, 89);
  55. #my @p = (3, 5, 17, 23, 29, 53, 89, 113, 197, 257, 353, 449, 617);
  56. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 257, 353, 617);
  57. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 449, 617);
  58. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 353, 617);
  59. #my @p = (3, 5, 17, 23, 29, 53, 89, 113, 353, 449, 617);
  60. #my @p = (3, 5, 17, 23, 29, 53, 89, 113, 197, 353, 449, 617);
  61. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 617);
  62. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 617);
  63. #my @p = (3, 5, 17, 23, 29, 43, 53, 89, 113, 127);
  64. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 617);
  65. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 617, 2549);
  66. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 617);
  67. # 46009993464351973747087455663482348080143005689116838928720068417823745
  68. # 23016037591494880781207254677674405791538920089036061003925025850757168330033146229133479745
  69. # 11741457044150231137356174490544808074004327146682132288353157271768338063142288065
  70. my $P = vecprod(@p);
  71. #my $C = "37839385943068863406967633413004957540054532539686888463944906014566240419460804270776358938980032660929917901837033235462145";
  72. #my $C = "772459017179480479061611372132330246001039753130436193419524315193543873326133868681083905";
  73. #my $C = "11741457044150231137356174490544808074004327146682132288353157271768338063142288065";
  74. #my $C = "46009993464351973747087455663482348080143005689116838928720068417823745";
  75. #my $C = "23016037591494880781207254677674405791538920089036061003925025850757168330033146229133479745";
  76. my $C = "463149379463251167706230703520995680069543921166639491398457345";
  77. #my $L = "1233872640";
  78. # , , , , ,
  79. #my $L = 6149448264960;
  80. #my $L = 374902528;
  81. #$L = 4352299952*128;
  82. #$L = vecprod(2, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 11, 13, 41);
  83. #$L *= 7;
  84. #$L *= 7;
  85. #$L = 294181888;
  86. foreach my $multiple (
  87. #80, 120, 144, 2520, 5760, 6480, 7920, 15120, 30240, 94248, 110880, 285120, 597168, 604800, 1441440, 1663200, 1738800, 2217600, 5216400, 13305600, 43243200, 64864800, 648648000, 4034016000, 8951342400, 12070749600, 67541947200
  88. 216, 420, 1380, 8064, 3960, 442800, 286200, 9666000
  89. ) {
  90. #foreach my $k(7, 11, 13, 19, 41, 77, 91, 133, 143, 209, 247, 287, 451, 533, 779, 1001, 1463, 1729, 2717, 3157, 3731, 5453, 5863, 8569, 10127, 19019, 41041, 59983, 70889, 111397, 779779) {
  91. #foreach my $k(2, 4, 7, 8, 11, 13, 14, 16, 22, 26, 28, 32, 44, 49, 52, 56, 77, 88, 91, 98, 104, 112, 143, 154, 176, 182, 196, 208, 224, 286, 308, 352, 364, 392, 416, 539, 572, 616, 637, 728, 784, 1001, 1078, 1144, 1232, 1274, 1456, 1568, 2002, 2156, 2288, 2464, 2548, 2912, 4004, 4312, 4576, 5096, 7007, 8008, 8624, 10192, 14014, 16016, 17248, 20384, 28028, 32032, 56056, 112112, 224224) {
  92. say "# L = $multiple";
  93. foreach my $k(1..1e5) {
  94. my $L = $multiple * $k;
  95. #say "# [$multiple] lambda = $L";
  96. my @divisors = divisors($L);
  97. @divisors = grep { $_ > 1 and is_prime($_+1) } @divisors;
  98. @divisors = map{ $_ + 1 } @divisors;
  99. @divisors = grep { "@p" !~ /\b$_\b/ } @divisors;
  100. @divisors = grep{ is_cyclic(vecprod($_, $P)) } @divisors;
  101. #@divisors = grep{ $_ < 1e6 } @divisors;
  102. #@divisors = (@divisors[0..15], @divisors[$#divisors-15..$#divisors]);
  103. #@divisors = @divisors[0..5];
  104. @divisors = uniq(@divisors);
  105. #@divisors = grep {$_ > 617} @divisors;
  106. #@divisors = grep { $_ < 1e6} @divisors;
  107. #while (scalar(@divisors) > 25) {
  108. # pop @divisors;
  109. #}
  110. # scalar(@divisors) <= 24 or next;
  111. #push @divisors, 127;
  112. #@divisors = (53, 257, 1409, 2003, 2297, 2549, 3137, 3329, 4019, 8009, 9857, 10193, 13313, 16073, 23297, 50177, 50513, 68993, 88397, 93809, 202049, 275969, 375233, 656657, 896897, 1500929, 3232769, 18386369, 22629377);
  113. # say "Primes = {", join(', ', @divisors), '}';
  114. my $len = scalar(@divisors);
  115. # printf("binomial(%s, %s) = %s\n", $len, $len>>1, binomial($len, $len>>1));
  116. foreach my $k(1..scalar(@divisors)) {
  117. binomial($len, $k) > 1e5 and next;
  118. #say "# Testing: $k";
  119. forcomb {
  120. if (is_carmichael(vecprod(@divisors[@_],$P))) {
  121. say vecprod(@divisors[@_], $P);
  122. }
  123. } $len, $k;
  124. }
  125. }
  126. }
  127. __END__
  128. 166320 -> 3649
  129. 15120 -> 2972
  130. 110880 -> 2925
  131. 55440 -> 2828
  132. 277200 -> 2775
  133. 25200 -> 2685
  134. 196560 -> 2586
  135. 332640 -> 2572
  136. 75600 -> 2483
  137. 65520 -> 2432
  138. 131040 -> 2274
  139. 720720 -> 2217
  140. 327600 -> 2185
  141. 100800 -> 2114
  142. 45360 -> 1964
  143. 221760 -> 1957
  144. 30240 -> 1940
  145. 831600 -> 1937
  146. 257040 -> 1917
  147. 60480 -> 1899
  148. 7201568 -> 1
  149. 4352299952 -> 1
  150. 5789168 -> 1
  151. 2618528 -> 1
  152. 2700544 -> 1
  153. 285824 -> 1
  154. 1350272 -> 1
  155. 2520 -> 226
  156. 3960 -> 141
  157. 3360 -> 128
  158. 3600 -> 127
  159. 2160 -> 119
  160. 4680 -> 114
  161. 6120 -> 106
  162. 6336 -> 95
  163. 5940 -> 86
  164. 4032 -> 82
  165. 6048 -> 67
  166. 1680 -> 65
  167. 9000 -> 63
  168. 9072 -> 61
  169. 4200 -> 60
  170. 3024 -> 53
  171. 4320 -> 52
  172. 1260 -> 52
  173. 4800 -> 52
  174. 9720 -> 48
  175. 1093200 -> 4
  176. 1012480 -> 3
  177. 1568400 -> 3
  178. 19153848 -> 2
  179. 1086840 -> 2
  180. 6984864 -> 2
  181. 2495532 -> 2
  182. 1320840 -> 2
  183. 1649640 -> 2
  184. 1461564 -> 2
  185. 1754970 -> 2
  186. 1840230 -> 2
  187. 5145300 -> 2
  188. 4156860 -> 2
  189. 2716452 -> 2
  190. 3715860 -> 2
  191. 1402092 -> 2
  192. 6531960 -> 2
  193. 1236300 -> 2
  194. 1626576 -> 2