prog_pfgw.pl 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu and M. F. Hasler
  3. # Date: 20 April 2018
  4. # Edit: 08 February 2024
  5. # https://github.com/trizen
  6. # Find the first index of the odd prime number in the nth-order Fibonacci sequence.
  7. # Known terms:
  8. # 0, 0, 4, 6, 9, 10, 40, 14, 17, 19, 361, 23, 90, 26, 373, 47, 288, 34, 75, 38, 251, 43, 67, 47, 74, 310, 511, 151534, 57, 20608, 1146, 62, 197, 94246, 9974, 287, 271172, 758
  9. # See also:
  10. # https://oeis.org/A302990
  11. use 5.020;
  12. use strict;
  13. use warnings;
  14. use Math::GMPz;
  15. use Math::Sidef;
  16. local $Sidef::Types::Number::Number::VERBOSE = 1;
  17. local $Sidef::Types::Number::Number::USE_PFGW = 1;
  18. my $ONE = Math::GMPz->new(1);
  19. use Math::Prime::Util::GMP qw(is_prob_prime);
  20. use experimental qw(signatures);
  21. sub nth_order_prime_fibonacci_index ($n = 2, $min = 0) {
  22. # Algorithm after M. F. Hasler from https://oeis.org/A302990
  23. my @a = map { $_ < $n ? ($ONE << $_) : $ONE } 1 .. ($n + 1);
  24. for (my $i = 2 * ($n += 1) - 2 ; ; ++$i) {
  25. my $t = $i % $n;
  26. $a[$t] = ($a[$t-1] << 1) - $a[$t];
  27. if ($i >= $min and Math::GMPz::Rmpz_odd_p($a[$t])) {
  28. say "[", $n-1, "] Testing: $i (", length($a[$t]), " digits)";
  29. if (Math::Sidef::is_prime($a[$t])) {
  30. say "\nFound: $t -> $i\n";
  31. return $i;
  32. }
  33. }
  34. }
  35. }
  36. # a(33) = 94246
  37. # a(36) = 271172
  38. # a(38) = ?
  39. # a(39) = ?
  40. # a(40) = 285
  41. # a(41) > 178000
  42. # a(42) = 558
  43. # a(43) > 52842 ?
  44. # a(44) = 19529 (found)
  45. # a(45) > 44159 ?
  46. # a(46) = 33369 (found)
  47. # a(47) = 239
  48. # a(48) = 6368
  49. # a(49) > 30349 ?
  50. # a(50) > 43705 ?
  51. # a(51) > 35411 ?
  52. # a(52) > 41127 ?
  53. # a(53) = 2860
  54. # a(54) = 2418
  55. # a(55) > 40935 ?
  56. # a(56) > 51184 ?
  57. # a(57) > 45355 ?
  58. # a(58) = 176
  59. # a(59) = 18418 (found)
  60. # a(60) = 1463
  61. # a(61) = 122
  62. # a(62) = 8755
  63. # a(63) = 5118
  64. # a(64) = 25089 (found)
  65. # a(65) = 988
  66. # a(66) = 333
  67. # a(67) = 406
  68. # a(68) > 39467 ?
  69. # a(69) > 34229 ?
  70. # a(70) = 1632
  71. # a(71) > 35855 ?
  72. # a(72) > 35039 ?
  73. # a(73) > 37738 ?
  74. # a(74) = 374
  75. # a(75) > 49094 ?
  76. # a(76) = 13704 (found)
  77. # a(77) = 4991
  78. # a(78) > 52454 ?
  79. # a(79) > 42078 ?
  80. # a(80) > 50624 ?
  81. # a(81) > 113568 ?!
  82. # a(82) > 43740 ?
  83. # a(83) > 41662 ?
  84. # a(84) > 37058 ?
  85. # a(85) > 40676 ?
  86. # a(86) = 347
  87. # a(87) > 40039 ?
  88. # a(88) > 39603 ?
  89. # a(89) = 178 (found)
  90. # a(90) > 40676 ?
  91. # a(91) > 40111 ?
  92. # a(92) = 1114
  93. # a(93) = 187
  94. # a(94) > 47023 ?
  95. # a(95) > 38783 ?
  96. # a(96) > 50341 ?
  97. # a(97) > 41648 ?
  98. # a(98) = 395
  99. # a(99) > 50498 ?
  100. # a(100) > 80294 ?
  101. # a(38) > 151085
  102. # a(39) > 105078
  103. # a(41) > 178000 (M. F. Hasler)
  104. # Searching for a(38) and a(39)
  105. say nth_order_prime_fibonacci_index(38, 151085);
  106. #say nth_order_prime_fibonacci_index(39, 105078);