new_idea_3.sf 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. #!/usr/bin/ruby
  2. # Idea: for each number `n` in `arr` and for each lambda `l` in `arr`, replace large prime factors of `l` with other prime divisors from lambda `l`.
  3. var arr = [
  4. 487954732492026166035814706202314376705
  5. 141934960805533535384100259905
  6. 2609668563371076823446624111609234945
  7. 22321294006753093794484119100782564881584237146952694846489144434824034305
  8. 72148620605333310080719701812041760839024918297692839329815300886091224428394819515628545
  9. 967037403232220731074074563038316755517610240570658812669537184604036430235566311331012838883641380865
  10. 406402829025353014759868508514893182061635216385
  11. 15076244937897319383799036175429336548625369631595367899653198961989759434810928251355411574785
  12. 871005264581548962932418919531990803260747265
  13. 610012201694720081796846702960249688144417680786846465
  14. 278162906898013748642772019172998608839057854602841254854175736240572851175099616062424065
  15. 2963658210542356083852877246926416492931527804540089510269883905
  16. 1692492088492238622532768569558090666689925078386295740708067178336619326186090793391105
  17. 644811775887535379664225513644980219319376317839497786625735944865592422785
  18. 2845358328636614328617082131255054540223949221002124433109986305
  19. 74875990602425226938138664024259158432269224416705
  20. 1018329989576989704159754753835889677652405111555820545
  21. 71967245196653338257378864734797608168672816153312963139871238665985
  22. 19666546275088335320957353962363201658812107005039715284928928608628170883585
  23. 129959381219943649417033775959204959948797179242551459265680758859265
  24. 463149379463251167706230703520995680069543921166639491398457345
  25. 19948738964527549499432007591778845447137932958457586625953063419475941273954097665
  26. 165502573617193579886078524884554371013787876466850820614145
  27. 382314270322310985139418831028955559235551077239363319937510690579825910692881422216705
  28. 2853450403236152332571821875265293508017495635204070217869999840422343584089739265
  29. 14701083488299057530174696885922722686956286485260401577115414785
  30. 61751285336040585295804391670071058142224865543324607243406589162503580666870926270465
  31. 37839385943068863406967633413004957540054532539686888463944906014566240419460804270776358938980032660929917901837033235462145
  32. 772459017179480479061611372132330246001039753130436193419524315193543873326133868681083905
  33. 321030150905393790929751720043602006651739765349595158023943724894346115208705
  34. 46009993464351973747087455663482348080143005689116838928720068417823745
  35. 23016037591494880781207254677674405791538920089036061003925025850757168330033146229133479745
  36. 11741457044150231137356174490544808074004327146682132288353157271768338063142288065
  37. ]
  38. var bern = Hash(
  39. 1 0
  40. 2 1
  41. 3 2
  42. 4 4
  43. 5 6
  44. 6 10
  45. 7 12
  46. 8 30
  47. 9 36
  48. 10 60
  49. 11 72
  50. 12 108
  51. 13 120
  52. 14 144
  53. 15 180
  54. 16 240
  55. 17 360
  56. 18 420
  57. 19 540
  58. 20 840
  59. 21 1008
  60. 22 1080
  61. 23 1200
  62. 24 1260
  63. 25 1620
  64. 26 1680
  65. 27 2016
  66. 28 2160
  67. 29 2520
  68. 30 3360
  69. 31 3780
  70. 32 5040
  71. 33 6480
  72. 34 7560
  73. 35 8400
  74. 36 10080
  75. 37 12600
  76. 38 15120
  77. 39 25200
  78. 40 30240
  79. 41 42840
  80. 42 45360
  81. 43 55440
  82. 44 60480
  83. 45 75600
  84. 46 85680
  85. 47 100800
  86. 48 110880
  87. 49 128520
  88. 50 131040
  89. 51 166320
  90. 52 196560
  91. 53 257040
  92. 54 332640
  93. 55 393120
  94. 56 514080
  95. 57 655200
  96. 58 665280
  97. 59 786240
  98. 60 831600
  99. 61 917280
  100. 62 982800
  101. 63 1081080
  102. 64 1179360
  103. 65 1285200
  104. 66 1310400
  105. 67 1441440
  106. 68 1663200
  107. 69 1965600
  108. 70 2162160
  109. 71 2751840
  110. 72 2827440
  111. 73 3326400
  112. 74 3341520
  113. 75 3603600
  114. 76 3931200
  115. 77 4324320
  116. 78 5654880
  117. 79 6652800
  118. 80 6683040
  119. 81 7207200
  120. 82 8648640
  121. 83 10810800
  122. 84 12972960
  123. 85 14414400
  124. 86 18378360
  125. 87 21621600
  126. 88 36756720
  127. 89 43243200
  128. 90 64864800).values.sort
  129. #var primes = [3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 617]
  130. #var primes = [3, 5, 17, 23, 29, 53]
  131. var primes = [3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 617]
  132. var P = primes.prod
  133. # Idea: for each number `n` in `arr` and for each lambda `l` in `arr`, replace large prime factors of `l` with other prime divisors from lambda `l`.
  134. for n in (arr.shuffle) {
  135. var l = n.lambda
  136. say "# Lambda = #{l}"
  137. var lambdas = arr.map{.lambda}.uniq.sort.grep{ _ != l }
  138. #for L in (bern.grep{ _ > 1e5}) {
  139. #for (1..1000) {
  140. for L in (lambdas) {
  141. say "L = #{L}"
  142. n = (n.factor.grep{ _ > primes.max }.prod * P)
  143. var f = n.factor.grep{ !primes.has(_) }
  144. #var divisors = L.divisors.map{.inc}.grep{.is_prime}.grep{!primes.has(_)}.grep{|p| L%p != 0 }.grep{!f.has(_)}.grep{ _ > primes.max }
  145. var divisors = L.divisors.map{.inc}.grep{.is_odd && .is_prime}
  146. divisors = divisors.grep {|p| L%p != 0 }
  147. primes.all { divisors.has(_) } || next
  148. divisors = divisors.grep { !f.has(_) }
  149. divisors = divisors.grep { !primes.has(_) }
  150. #for j in (f.len ^.. f.len-5) {
  151. for j in (1..5), k in (1..14) {
  152. var count1 = 0
  153. say "# Combination: j = #{j} ; k = #{k}"
  154. f.combinations(j, {|*a|
  155. #var a = f.last(j)
  156. var count2 = 0
  157. divisors.combinations(k, {|*b|
  158. with (n / a.prod * b.prod) {|c|
  159. assert(c.is_int)
  160. #say c.factor
  161. say c if (c != n && c.is_carmichael)
  162. }
  163. #break if (++count2 > 1e3)
  164. })
  165. #break if (++count1 > 1e3)
  166. })
  167. }
  168. }
  169. }
  170. __END__
  171. var nf = [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]
  172. #say arr.join(' ')
  173. #var primes = [3, 5, 17, 23, 29, 53, 83, 89, 113, 197, 353, 617]
  174. #var primes = [3, 5, 17, 23, 29, 53, 83, 89, 113]
  175. var primes = [3, 5, 17, 23, 29, 83]
  176. #var primes = [3, 5, 17, 23, 29, 43, 53, 89, 113, 127, 157, 257]
  177. var P = primes.prod
  178. for n in (arr) {
  179. say "# n = #{n.len}"
  180. var f = n.factor.grep { !primes.has(_) }
  181. for k in (f.len ^.. f.len-5 ) {
  182. say "# Combination: #{k}"
  183. f.combinations(k, {|*a|
  184. with (a.prod * P) {|c|
  185. if (c.is_carmichael) {
  186. say "\n\t\t\tFound: #{c}\n"
  187. }
  188. }
  189. })
  190. }
  191. }
  192. __END__
  193. for n in (arr.map{.lambda}.uniq.sort) {
  194. say "# Bern = #{n}"
  195. var d = n.divisors.grep{ _ > 1}.map{.inc}.grep{.is_prime}.grep{!primes.has(_)}.grep{ _ > primes.max}.grep{ _ < 1e6}
  196. for k in (1..d.len) {
  197. say "# Combination: #{k}"
  198. d.combinations(k, {|*a|
  199. with (a.prod * P) {|c|
  200. if (c.is_carmichael) {
  201. say "\n\t\t\tFound: #{c}\n"
  202. }
  203. #say c if c.is_pseudoprime
  204. }
  205. })
  206. }
  207. }