prog2.sf 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #!/usr/bin/ruby
  2. # Least positive k such that n*k^k - 1 is a prime, or 0 if no such k exists.
  3. # https://oeis.org/A231735
  4. # Known terms:
  5. # 2, 2, 1, 1, 2, 1, 1128, 1, 0, 3, 2, 1, 6, 1, 2, 3, 2, 1, 6, 1, 2, 3, 14, 1, 0, 2, 2, 6, 206, 1, 1590, 1, 2, 11, 2, 3
  6. # From Gordon Atkinson, Aug 20 2019:
  7. # For all odd numbers n>3, a(n) is even.
  8. # For all odd numbers n>1, a(n^2) = 0.
  9. # ((2*n+1)^2 * (2*k)^(2*k) - 1) = (2^(k+1) * k^k * n + 2^k * k^k - 1) * (2^(k+1) * k^k * n + 2^k * k^k + 1)
  10. # ((2*n+1)^2 * (2*k+1)^(2*k+1) - 1) = 8*k * (2*k + 1)^(2*k) * n^2 + 4*(2*k + 1)^(2*k) * n^2 + 8*k * (2*k+1)^(2*k)*n + 4*(2*k+1)^(2*k)*n + 2*k*(2*k+1)^(2*k) + (2*k+1)^(2*k) - 1
  11. func a(n) {
  12. n.is_square && n.isqrt.is_odd && return 0
  13. 1..Inf -> first {|k|
  14. is_prob_prime(n * k**k - 1)
  15. }
  16. }
  17. # a(37) >= 9114
  18. # a(43) >= 4704
  19. # a(46) >= 1380
  20. # Terms 38..42:
  21. # 1, 6, 6, 2, 1
  22. # Terms 44..45
  23. # 1, 2
  24. 38..42 -> map(a).say
  25. 44..45 -> map(a).say
  26. #__END__
  27. func b(n, from = 1) {
  28. for k in (from .. 1e6 `by` 2) {
  29. say "Testing: #{k}"
  30. if (is_prob_prime(k**k * n - 1)) {
  31. die "Found: #{k}"
  32. }
  33. }
  34. }
  35. b(37, 9114)
  36. #b(43, 4704)
  37. #b(46, 1380)