fibonacci_pseudoprimes_from_twin_primes.sf 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #!/usr/bin/ruby
  2. # Author: Daniel "Trizen" Șuteu
  3. # Date: 25 September 2018
  4. # https://github.com/trizen
  5. # New method for generating Fibonacci pseudoprimes, using twin
  6. # primes, `p` and `p+2`, such that `p` is congruent to 2 mod 5.
  7. # Then `n = p * (p+2)` is a Fibonacci pseudoprime, which has the Legendre symbol `(n/5) = -1`.
  8. # Meaning that `Fibonacci(n+1)` is divisible by `n`.
  9. # See also:
  10. # https://oeis.org/A081264
  11. # Blog post:
  12. # https://trizenx.blogspot.com/2018/08/investigating-fibonacci-numbers-modulo-m.html
  13. func fibonacci_pseudoprime(r) {
  14. for (var p = r.random_prime; true ; p.next_prime!) {
  15. if ((p%5 == 2) && is_prime(p+2)) {
  16. var q = p+2
  17. var n = p*q
  18. assert(fibmod(n+1, n) == 0, "#{n} is a Fibonacci pseudoprime")
  19. return n
  20. }
  21. }
  22. }
  23. for k in (1..20) {
  24. say fibonacci_pseudoprime(10**k)
  25. }
  26. __END__
  27. 323
  28. 11663
  29. 685583
  30. 46621583
  31. 6105547043
  32. 433329925283
  33. 11987438194943
  34. 7897153159301183
  35. 237761169627329603
  36. 73605505484780549603
  37. 571805150127095969603
  38. 349885058917236330902543
  39. 84072580400168408258086463
  40. 7563284296882185341241796643
  41. 59464397158533235506324948803
  42. 9037748124761016960091148447843
  43. 7930239355318379515713220941486143
  44. 95634643477245710026142579336818703
  45. 65923836668452066780957296118497424163
  46. 5014955816736641611376222180873426125823