simple_prog.sf 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/usr/bin/ruby
  2. # Index of smallest repunit having exactly n prime factors (counted with multiplicity).
  3. # https://oeis.org/A046421
  4. # Known terms:
  5. # 1, 2, 3, 13, 8, 6, 15, 12, 28, 18, 24, 32, 36, 30, 54, 42, 78, 100, 72, 176, 60, 208, 84, 132, 160, 198, 120, 204, 216, 308, 168, 280, 306, 180, 210, 264, 270, 252, 378, 336, 300
  6. # Lower-bounds:
  7. # a(41) >= 377
  8. # Conjecture:
  9. # a(41) >= 431
  10. # a(49) >= 961
  11. # Upper-bounds:
  12. # a(41) <= 684
  13. # a(42) <= 546
  14. # a(43) <= 528
  15. # a(44) <= 462
  16. # a(45) = 360
  17. # a(46) <= 576
  18. # a(47) <= 624
  19. # a(48) <= 768
  20. include("../../../factordb/auto.sf")
  21. func a(n, from=1) {
  22. for k in (from..Inf) {
  23. say "Checking: #{k}"
  24. var t = (10**k - 1)/9
  25. var f = factordb(t)
  26. if (f.all_prime) {
  27. f.len == n && return k
  28. next
  29. }
  30. var cf = f.grep{.is_composite}
  31. var pf = f.grep{.is_prime}
  32. if ((2*cf.len + pf.len) > n) {
  33. next
  34. }
  35. var rem = cf.prod
  36. #var gkpf = pf.max
  37. var gkpf = max(pf.max\\0, 10**20)
  38. if (defined(gkpf)) {
  39. rem >= (gkpf**(n - pf.len)) || next
  40. }
  41. say ":: Slow check: #{k}"
  42. if (t.is_almost_prime(n)) {
  43. return k
  44. }
  45. }
  46. }
  47. say a(49, 322)