generate.pl 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618
  1. #!/usr/bin/perl
  2. # a(n) = least Lucas-Carmichael number which is divisible by b(n), where {b(n)} (A255602) is the list of all numbers which could be a divisor of a Lucas-Carmichael number.
  3. # https://oeis.org/A253598
  4. # Upper-bounds:
  5. # a(205) <= 649450807457655279
  6. # a(271) <= 3394263983671190271
  7. # a(274) <= 261147917637896799
  8. # a(303) <= 160372803283722399
  9. # New term (11 September 2022):
  10. # a(205) = 10409957634999
  11. use 5.020;
  12. use warnings;
  13. use ntheory qw(:all);
  14. use experimental qw(signatures);
  15. my %table = qw(
  16. 471 4131709859199
  17. 479 5058719
  18. 481 505863371
  19. 485 218735
  20. 487 1901735
  21. 489 532100807679
  22. 491 966779
  23. 493 10260809
  24. 497 194327
  25. 499 14970499
  26. 503 761039
  27. 505 20705
  28. 509 11682059
  29. 511 50168447
  30. 515 760655
  31. 517 18095
  32. 521 31276151
  33. 523 2316562079
  34. 527 43383167
  35. 533 29315
  36. 535 265895
  37. 541 4992691535
  38. 543 377049487359
  39. 547 96078393179
  40. 551 60059
  41. 553 12719
  42. 557 185551739
  43. 559 8421335
  44. 563 65094623
  45. 565 129477095
  46. 569 973559
  47. 571 25149695
  48. 577 5778659039
  49. 579 1019982346239
  50. 583 2915
  51. 587 2416679
  52. 589 116628479
  53. 593 85595399
  54. 595 31535
  55. 597 6304359999
  56. 599 11141999
  57. 601 434886605
  58. 607 50561279
  59. 611 22575839
  60. 613 1645919099
  61. 617 1100831039
  62. 619 49124459
  63. 623 1017359
  64. 629 2276351
  65. 631 798215
  66. 633 10409957634999
  67. 635 78402815
  68. 641 1172426819
  69. 643 178474295
  70. 647 3354695
  71. 649 46079
  72. 651 4962284607
  73. 653 5022676835
  74. 655 8421335
  75. 659 6959699
  76. 661 193849487
  77. 667 51359
  78. 669 3211164543
  79. 671 5669279
  80. 673 141070895
  81. 677 96850943
  82. 683 13081499
  83. 685 39003215
  84. 687 24319371999
  85. 689 3700619
  86. 691 2710757759
  87. 697 120581
  88. 701 13287455
  89. 707 140096999
  90. 709 239110959
  91. 713 4991
  92. 715 29315
  93. 719 3106799
  94. 721 760655
  95. 723 25603599
  96. 727 23287991
  97. 731 588455
  98. 733 78372051407
  99. 737 22847
  100. 739 107732159
  101. 741 1293531436119
  102. 743 1659119
  103. 749 265895
  104. 751 187498415
  105. 755 390335
  106. 757 49569379679
  107. 761 87562943
  108. 763 1566265799
  109. 767 1915199
  110. 769 6514199
  111. 773 11368511
  112. 777 1778324753919
  113. 779 2150819
  114. 781 46079
  115. 785 57872555
  116. 787 1241099
  117. 791 24205391
  118. 793 30222023
  119. 797 4452839
  120. 799 90287
  121. 803 16719263
  122. 805 8855
  123. 809 4587839
  124. 811 11195855
  125. 813 174550287
  126. 815 240080255
  127. 817 5719
  128. 821 984624479
  129. 823 105114383
  130. 827 2055095
  131. 829 2596088939
  132. 831 3394263983671190271
  133. 835 2048255
  134. 839 14800799
  135. 849 261147917637896799
  136. 851 6730559
  137. 853 759786719
  138. 857 13971671
  139. 859 126325399
  140. 863 9694079
  141. 865 1116663965
  142. 869 6023039
  143. 871 23176439
  144. 877 20271948839
  145. 881 6994259
  146. 883 603383039
  147. 887 501737759
  148. 889 162687
  149. 893 895679
  150. 899 12676799
  151. 901 31535
  152. 903 2215225217919
  153. 905 45708573455
  154. 907 285774839
  155. 911 10801727
  156. 913 20999
  157. 917 42624911
  158. 919 487842879
  159. 921 14970106227
  160. 923 7366463
  161. 929 33695759
  162. 935 935
  163. 937 35847939959
  164. 939 160372803283722399
  165. 941 326947004999
  166. 943 30071327
  167. 947 6613769399
  168. 949 306871487
  169. 953 7274249
  170. 955 73535
  171. 959 13971671
  172. 965 1840311935
  173. 967 4681247
  174. 971 796578299
  175. 977 22824172799
  176. 979 1097459
  177. 983 60939119
  178. 985 117215
  179. 989 588455
  180. 991 1218027199
  181. 993 1464337823871
  182. 997 16070342903
  183. 1003 895679
  184. 1007 2756159
  185. 1009 35669159
  186. 1011 69622135643825751
  187. 1013 90393029
  188. 1019 115372199
  189. 1021 142955315
  190. 1027 9486399
  191. 1031 1759843799
  192. 1033 62778871583
  193. 1037 3354695
  194. 1039 77801359
  195. 1043 54958799
  196. 1047 286306774599
  197. 1049 135479399
  198. 1051 135470012351
  199. 1055 760655
  200. 1057 61947599
  201. 1061 1522283543
  202. 1063 29407895
  203. 1067 218735
  204. 1069 12583199
  205. 1073 4874639
  206. 1079 104663
  207. 1081 76751
  208. 1085 1747955615
  209. 1087 240080255
  210. 1091 158453567
  211. 1093 888437399
  212. 1097 1396023551
  213. 1099 2770408655
  214. 1101 914506843161999
  215. 1103 59668991
  216. 1105 49412285
  217. 1109 129255059
  218. 1111 13670855
  219. 1115 2048255
  220. 1117 2291560127
  221. 1119 2215225217919
  222. 1121 88559
  223. 1123 96250502879
  224. 1129 29343839
  225. 1133 1612670279
  226. 1135 461819015
  227. 1137 37348274919
  228. 1141 3075810815
  229. 1147 381626399
  230. 1151 25194239
  231. 1153 15997348079
  232. 1157 939989609
  233. 1159 1922689439
  234. 1163 565861139
  235. 1165 9868715
  236. 1171 997794304415
  237. 1177 196559
  238. 1181 3334906619
  239. 1187 16923059
  240. 1189 2581319
  241. 1193 10197581471
  242. 1201 572531110799
  243. 1205 14605403735
  244. 1207 194327
  245. 1209 84895311423
  246. 1211 1046435999
  247. 1213 20373173183
  248. 1217 69669599
  249. 1219 913031
  250. 1223 37425023
  251. 1227 187243828239
  252. 1229 105818129
  253. 1231 295736671
  254. 1237 1245426650579
  255. 1241 532070063
  256. 1243 50407379
  257. 1247 113024339
  258. 1249 485549999
  259. 1253 1256759
  260. 1255 11195855
  261. 1259 1587599
  262. 1261 104663
  263. 1263 1707581786703519
  264. 1265 8855
  265. 1271 34562303
  266. 1273 26456759
  267. 1277 256226219
  268. 1279 62211839
  269. 1281 162687
  270. 1283 3695056679
  271. 1285 102310415
  272. 1289 256074029
  273. 1291 178474295
  274. 1295 461819015
  275. 1297 77924443519
  276. 1299 12304798623039
  277. 1301 49124459
  278. 1303 22824172799
  279. 1307 1710863
  280. 1309 1710863
  281. 1313 279173999
  282. 1315 67418735
  283. 1317 286306774599
  284. 1319 3483479
  285. 1321 95663965319
  286. 1327 193849487
  287. 1333 29010079
  288. 1337 73535
  289. 1343 2193119
  290. 1349 9349919
  291. 1351 1840311935
  292. 1355 240080255
  293. 1357 14800799
  294. 1361 1925976959
  295. 1363 1707839
  296. 1367 3741479
  297. 1371 714791836281522999
  298. 1373 1439402399
  299. 1379 117215
  300. 1381 221511111527
  301. 1385 3075786974315
  302. 1387 850615199
  303. 1389 99467679
  304. 1391 57872555
  305. 1393 128912399
  306. 1397 54408959
  307. 1399 95972799
  308. 1403 30222023
  309. 1405 900744095
  310. 1407 28050394272159
  311. 1409 669515939
  312. 1411 7055
  313. 1415 18209964695
  314. 1417 2906220239
  315. 1423 239110959
  316. 1427 279173999
  317. 1429 3032510909
  318. 1433 310294655
  319. 1439 343979999
  320. 1443 30073928079
  321. 1447 22695814439
  322. 1451 250716839
  323. 1453 25578000287
  324. 1457 38999519
  325. 1459 96403747439
  326. 1461 88330062057663
  327. 1463 24685199
  328. 1465 4609544855
  329. 1469 252654779
  330. 1471 595462271
  331. 1477 760655
  332. 1481 1501273409
  333. 1483 270696439
  334. 1487 73019135
  335. 1489 18234757079
  336. 1493 45598971599
  337. 1495 8421335
  338. 1497 306307407999
  339. 1499 2249999
  340. 1501 88559
  341. 1505 588455
  342. 1507 11882931599
  343. 1511 130225535
  344. 1513 80189
  345. 1517 7110179
  346. 1523 7947283571
  347. 1529 10138799
  348. 1531 3586258799
  349. 1533 6587452767
  350. 1535 67418735
  351. 1537 35669159
  352. 1541 214199
  353. 1543 88043680295
  354. 1549 890753999
  355. 1553 4230625139
  356. 1555 2061639215
  357. 1559 133763759
  358. 1565 9059114946815
  359. 1567 130225535
  360. 1569 12084948601239
  361. 1571 219797039
  362. 1577 1241099
  363. 1579 14970499
  364. 1583 20061359
  365. 1585 30036458495
  366. 1589 108946607
  367. 1591 7110179
  368. 1597 119945879
  369. 1601 10260809
  370. 1603 8164079
  371. 1607 31010279
  372. 1609 1111321819
  373. 1613 208916200349
  374. 1619 338340239
  375. 1621 143846925641
  376. 1627 2452749683
  377. 1631 202767551
  378. 1633 76751
  379. 1637 356628635
  380. 1639 67199
  381. 1641 821474220921489687
  382. 1643 103727519
  383. 1645 18095
  384. 1649 7234163
  385. 1651 32869759
  386. 1655 196377335
  387. 1657 30222023
  388. 1659 108992419599
  389. 1661 390335
  390. 1663 3259800959
  391. 1667 436548959
  392. 1669 60301722719
  393. 1673 10210319
  394. 1677 1464337823871
  395. 1679 81802559
  396. 1685 288733827095
  397. 1687 25603599
  398. 1691 1097459
  399. 1693 306871487
  400. 1697 103264532219
  401. 1699 9667141799
  402. 1703 3700619
  403. 1705 287379455
  404. 1709 2924099
  405. 1711 152279
  406. 1713 17156013520359
  407. 1721 2723515199
  408. 1723 245754407039
  409. 1727 696825503
  410. 1731 430717758620799
  411. 1733 5778659039
  412. 1735 18476015
  413. 1739 2276351
  414. 1741 315349800479
  415. 1747 19318062203
  416. 1751 202767551
  417. 1753 5083021278719
  418. 1759 95972799
  419. 1763 7110179
  420. 1765 103382437535
  421. 1767 189099039
  422. 1769 139098239
  423. 1771 8855
  424. 1777 13228853399
  425. 1781 107556371
  426. 1783 75173549759
  427. 1787 252419111
  428. 1789 404717546519
  429. 1793 3075810815
  430. 1799 275766911
  431. 1801 207377944199
  432. 1803 53399465726494719
  433. 1807 66709019
  434. 1811 1834378199
  435. 1817 12719
  436. 1819 7234163
  437. 1821 1778324753919
  438. 1823 282639743
  439. 1829 12676799
  440. 1831 146348770399
  441. 1835 15389361455
  442. 1837 196559
  443. 1839 15187052332978239
  444. 1841 325428047
  445. 1843 2616973379
  446. 1847 1396023551
  447. 1853 679389479
  448. 1855 31535
  449. 1857 908414916795399
  450. 1861 10397407
  451. 1865 4379107655
  452. 1867 53722314491
  453. 1871 84062159
  454. 1873 2170525568639
  455. 1877 181061935067
  456. 1879 17664479
  457. 1883 3722941439
  458. 1889 10712519
  459. 1893 570014742966591
  460. 1897 108946607
  461. 1901 6345558911
  462. 1903 19716983
  463. 1907 800484227
  464. 1909 20999
  465. 1913 11097953855
  466. 1915 147455
  467. 1919 115372199
  468. 1921 90287
  469. 1927 64456223
  470. 1929 290679333699
  471. 1931 406647359
  472. 1933 726969805631
  473. 1937 271038599
  474. 1939 987831967199
  475. 1943 36981119
  476. 1949 1181972999
  477. 1951 4962284607
  478. 1955 588455
  479. 1957 189099039
  480. 1961 632648015
  481. 1963 1171355471
  482. 1967 10346390495
  483. 1969 966779
  484. 1973 1250201315
  485. 1979 97962479
  486. 1981 22644087935
  487. 1983 128828457866303103
  488. 1985 247545314495
  489. 1987 1915827647
  490. 1991 677913599
  491. 1993 43716455
  492. 1997 107732159
  493. 1999 103949999
  494. 1 399 3 399 5 935 7 399 11 935 13 2015 17 935 19 399 21 399 23 4991 29 51359 31 2015 35 8855 37 1584599 39 9486399 41 20705 43 5719 47 18095 53 2915 55 935 57 399 59 46079 61 162687 65 2015 67 22847 71 46079 73 16719263 77 8855 79 12719 83 7055 85 935 89 80189 93 189099039 97 104663 101 20705 103 482143 107 196559 109 60059 111 30073928079 113 90287 115 8855 119 31535 127 162687 129 174550287 131 3441239 133 399 137 13971671 139 155819 143 29315 149 67199 151 390335 155 2015 157 57872555 161 4991 163 208643423 167 196559 173 120581 179 676799 181 90393029 183 162687 185 78402815 187 935 191 73535 193 565861139 197 117215 199 676799 201 487842879 203 51359 205 20705 209 81719 211 760655 215 588455 217 4991 219 6587452767 221 653939 223 2048255 227 776567 229 8164079 233 709019 235 18095 237 9486399 239 6023039 241 3441239 247 6539819 251 63503 253 8855 257 102310415 259 2276351 263 3332999 265 2915 269 653939 271 663679 277 525720239 281 301040639 283 256226219 291 7710848622399 293 3704399 299 7366463 301 5719 305 3354695 307 8699459 309 189099039 311 776567 313 20682759239 317 142842419 319 51359 323 81719 327 11218119879 329 18095 331 196377335 335 150042815 337 427717367 341 22847 347 1811687 349 10138799 353 8046928343 355 265895 359 388079 365 956213495 367 34709759 371 31535 373 192373631 377 2581319 379 1584599 381 162687 383 147455 385 8855 389 11682059 391 81719 397 10749148577 399 399 401 229390847 403 2015 407 2276351 409 261429119 413 1256759 415 7055 417 487842879 419 880319 421 873919799 427 162687 431 10054799 433 14658349 437 81719 439 966239 443 16719263 449 5455799 451 29315 453 37348274919 457 65094623 461 49412285 463 1719119 467 6994259 469 26456759
  495. );
  496. sub divceil ($x, $y) { # ceil(x/y)
  497. my $q = divint($x, $y);
  498. ($q * $y == $x) ? $q : ($q + 1);
  499. }
  500. sub lucas_carmichael_numbers_in_range ($m, $A, $B, $k, $callback) {
  501. my $L = lcm(map { $_ + 1 } factor($m));
  502. if ($L == 0) {
  503. $L = 1;
  504. }
  505. $A = vecmax($A, $m, pn_primorial($k));
  506. if ($A > $B) {
  507. return;
  508. }
  509. sub ($m, $lambda, $p, $k, $u = undef, $v = undef) {
  510. if ($k == 1) {
  511. $u //= vecmax($p, divceil($A, $m));
  512. $v //= divint($B, $m);
  513. say "# Sieving: $m -> ($u, $v)" if ($v - $u > 1e8);
  514. if ($v - $u > 1e10) {
  515. die "Range too large!\n";
  516. }
  517. forprimes {
  518. if ($m % $_ != 0) {
  519. my $t = $m * $_;
  520. if (($t + 1) % $lambda == 0 and ($t + 1) % ($_ + 1) == 0) {
  521. $callback->($t);
  522. }
  523. }
  524. } $u, $v;
  525. return;
  526. }
  527. my $s = rootint(divint($B, $m), $k);
  528. for (my $r ; $p <= $s ; $p = $r) {
  529. $r = next_prime($p);
  530. if ($m % $p == 0) {
  531. next;
  532. }
  533. my $L = lcm($lambda, $p + 1);
  534. gcd($L, $m) == 1 or next;
  535. my $t = $m * $p;
  536. my $u = divceil($A, $t);
  537. my $v = divint($B, $t);
  538. if ($u <= $v) {
  539. __SUB__->($t, $L, $r, $k - 1, (($k == 2 && $r > $u) ? $r : $u), $v);
  540. }
  541. }
  542. }
  543. ->($m, $L, 3, $k);
  544. return 1;
  545. }
  546. foreach my $m (sort { $a <=>$b } keys %table) {
  547. #next if ($m < 471);
  548. #next if ($m <= 633);
  549. next if ($m <= 849);
  550. my $upto = $table{$m};
  551. #$upto = 1e13;
  552. #next if ($m == 471);
  553. #next if ($m != 633);
  554. #$m = 1623;
  555. #$upto = ~0;
  556. say "# Searching for m = $m with limit = $upto";
  557. last if ($upto > ~0);
  558. my $min = $upto;
  559. my $found = 0;
  560. foreach my $k (reverse(1..100)) {
  561. #foreach my $k (7..100) {
  562. lucas_carmichael_numbers_in_range($m, 1, $min, $k, sub ($n) { ++$found; if ($n < $min) { $min = $n } });
  563. }
  564. if ($m == $upto) {
  565. $m = $upto;
  566. $found = 1;
  567. }
  568. if (not $found) {
  569. die "error for m = $m: no term found";
  570. }
  571. if ($min < $upto) {
  572. say "# !!!Smaller term found!!!"
  573. }
  574. say "$m $min";
  575. }