comb_cyclic.pl 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  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);
  6. #~ 1.8173 record: 64075459460541239985
  7. #~ 1.8274 record: 14370921672011352376545
  8. #~ 1.8670 record: 100724996094964745183793345
  9. #~ 1.8937 record: 5981802520294676451270038145
  10. #~ 1.9103 record: 141934960805533535384100259905
  11. #~ 1.9103 record: 2609668563371076823446624111609234945
  12. #~ 1.9176 record: 871005264581548962932418919531990803260747265
  13. #~ 1.9296 record: 74875990602425226938138664024259158432269224416705
  14. #~ 1.9332 record: 1018329989576989704159754753835889677652405111555820545
  15. #~ 1.9483 record: 165502573617193579886078524884554371013787876466850820614145
  16. #~ 1.9498 record: 14701083488299057530174696885922722686956286485260401577115414785
  17. #~ 1.9540 record: 321030150905393790929751720043602006651739765349595158023943724894346115208705
  18. #my @p = (3, 5, 17, 23, 29, 83, 89, 353, 449);
  19. #my @p = (3, 5, 17, 23, 29);
  20. #my @p = (3, 5, 17, 23, 29);
  21. #my @p = (3, 5, 17, 23, 29, 83, 89);
  22. #my @p = (3, 5, 17, 23, 29, 83, 89, 113, 197, 353, 449, 617);
  23. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 353, 449);
  24. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 449, 617);
  25. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113);
  26. #my @p = (3, 5, 17, 23, 29, 83, 89, 113, 197, 353, 449, 617, 3137);
  27. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 449, 617, 4019, 656657);
  28. #my @p = (3, 5, 17, 23, 29, 53, 83, 89);
  29. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113);
  30. #my @p = (3, 5, 17, 23, 29, 43, 53, 89, 113, 127);
  31. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 257, 353, 617);
  32. #my @p = (3, 5, 17, 23, 29);
  33. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 449, 617);
  34. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 257, 353, 449, 617);
  35. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 1409, 3137, 10193, 16073, 23297, 88397, 896897, 1500929, 18386369);
  36. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 617); # seems promising
  37. #my @p = (3, 5, 17, 23, 29, 53); # seems promising
  38. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 617);
  39. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 257, 353, 617);
  40. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 257, 353, 617, 1409, 2003, 2549, 3137);
  41. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 617);
  42. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 353, 617);
  43. # Cyclic numbers:
  44. # 5074617663820994745
  45. # 2278503331055626640505
  46. # 7606851878067671122755
  47. # 3415476493252384334116995
  48. sub is_cyclic ($n) {
  49. gcd(euler_phi($n), $n) == 1;
  50. }
  51. #my @p = factor("3415476493252384334116995");
  52. #push @p, 83;
  53. my @p = (3, 5, 17, 23, 29, 53, 89);
  54. #my @p = (3, 5, 17, 23, 29, 53, 89, 113, 197, 257, 353, 449, 617);
  55. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 257, 353, 617);
  56. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 449, 617);
  57. #my @p = (3, 5, 17, 23, 29, 53, 83, 89, 113, 353, 617);
  58. #my @p = (3, 5, 17, 23, 29, 53, 89, 113, 353, 449, 617);
  59. #my @p = (3, 5, 17, 23, 29, 53, 89, 113, 197, 353, 449, 617);
  60. # 46009993464351973747087455663482348080143005689116838928720068417823745
  61. # 23016037591494880781207254677674405791538920089036061003925025850757168330033146229133479745
  62. # 11741457044150231137356174490544808074004327146682132288353157271768338063142288065
  63. my $P = vecprod(@p);
  64. #my $C = "37839385943068863406967633413004957540054532539686888463944906014566240419460804270776358938980032660929917901837033235462145";
  65. #my $C = "772459017179480479061611372132330246001039753130436193419524315193543873326133868681083905";
  66. #my $C = "11741457044150231137356174490544808074004327146682132288353157271768338063142288065";
  67. #my $C = "46009993464351973747087455663482348080143005689116838928720068417823745";
  68. #my $C = "23016037591494880781207254677674405791538920089036061003925025850757168330033146229133479745";
  69. #my $C = "463149379463251167706230703520995680069543921166639491398457345";
  70. my $C = "265254290756066930358119577715591455268521886989391944998212913199131074729078785";
  71. #my $L = carmichael_lambda($C);
  72. #my $L = "1233872640";
  73. # , , 106525875456, 473034481920, 745681128192, 6149448264960
  74. #my $L = 40971490560;
  75. my $L = 374902528;
  76. #$L = 4352299952*128;
  77. #$L = vecprod(2, 2, 2, 2, 2, 2, 2, 2, 7, 7, 7, 11, 13, 41);
  78. #$L *= 7;
  79. #$L *= 7;
  80. #$L = 294181888;
  81. say "lambda = $L";
  82. my @divisors = divisors($L);
  83. @divisors = grep { $_ > 1 and is_prime($_+1) } @divisors;
  84. @divisors = map{ $_ + 1 } @divisors;
  85. @divisors = grep { "@p" !~ /\b$_\b/ } @divisors;
  86. @divisors = grep{ is_cyclic(vecprod($_, $P)) } @divisors;
  87. @divisors = grep{ $_ < 5e4 } @divisors;
  88. #push @divisors, 127;
  89. #@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);
  90. say "Primes = {", join(', ', @divisors), '}';
  91. my $len = scalar(@divisors);
  92. printf("binomial(%s, %s) = %s\n", $len, $len>>1, binomial($len, $len>>1));
  93. foreach my $k(1..scalar(@divisors)) {
  94. say "# Testing: $k";
  95. forcomb {
  96. if (is_carmichael(vecprod(@divisors[@_],$P))) {
  97. say vecprod(@divisors[@_], $P);
  98. }
  99. } $len, $k;
  100. }
  101. __END__
  102. 166320 -> 3649
  103. 15120 -> 2972
  104. 110880 -> 2925
  105. 55440 -> 2828
  106. 277200 -> 2775
  107. 25200 -> 2685
  108. 196560 -> 2586
  109. 332640 -> 2572
  110. 75600 -> 2483
  111. 65520 -> 2432
  112. 131040 -> 2274
  113. 720720 -> 2217
  114. 327600 -> 2185
  115. 100800 -> 2114
  116. 45360 -> 1964
  117. 221760 -> 1957
  118. 30240 -> 1940
  119. 831600 -> 1937
  120. 257040 -> 1917
  121. 60480 -> 1899
  122. 7201568 -> 1
  123. 4352299952 -> 1
  124. 5789168 -> 1
  125. 2618528 -> 1
  126. 2700544 -> 1
  127. 285824 -> 1
  128. 1350272 -> 1
  129. 2520 -> 226
  130. 3960 -> 141
  131. 3360 -> 128
  132. 3600 -> 127
  133. 2160 -> 119
  134. 4680 -> 114
  135. 6120 -> 106
  136. 6336 -> 95
  137. 5940 -> 86
  138. 4032 -> 82
  139. 6048 -> 67
  140. 1680 -> 65
  141. 9000 -> 63
  142. 9072 -> 61
  143. 4200 -> 60
  144. 3024 -> 53
  145. 4320 -> 52
  146. 1260 -> 52
  147. 4800 -> 52
  148. 9720 -> 48
  149. 1093200 -> 4
  150. 1012480 -> 3
  151. 1568400 -> 3
  152. 19153848 -> 2
  153. 1086840 -> 2
  154. 6984864 -> 2
  155. 2495532 -> 2
  156. 1320840 -> 2
  157. 1649640 -> 2
  158. 1461564 -> 2
  159. 1754970 -> 2
  160. 1840230 -> 2
  161. 5145300 -> 2
  162. 4156860 -> 2
  163. 2716452 -> 2
  164. 3715860 -> 2
  165. 1402092 -> 2
  166. 6531960 -> 2
  167. 1236300 -> 2
  168. 1626576 -> 2