prog.sf 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/usr/bin/ruby
  2. #~ f(n) = least number k such that the concatenation of k composite numbers starting from the n-th composite is prime
  3. #~ f(1) = ?
  4. #~ f(2) = ?
  5. #~ f(3) = 2 (3rd composite = 8 ; 89 is prime)
  6. #~ f(4) = ?
  7. #~ f(5) = 646
  8. #~ f(6) = 14662 (found by Hans Havermann via SeqFan)
  9. #~ f(7) = 6 (7th composite = 14 ; 141516182021 is prime)
  10. #~ f(8) = 14 (8th composite = 15 ; 1516182021222425262728303233 is prime)
  11. #~ f(9) = 302
  12. #~ f(10) = 24 (10th composite = 18; 182021222425262728303233343536383940424445464849 is prime)
  13. # Extra values:
  14. # f(11) = 1388 (found by cwwuieee via SeqFan)
  15. # f(12) = 6
  16. # f(13) = ?
  17. # f(14) = ?
  18. # Bounds:
  19. # f(1) > composite_count(11333)
  20. # f(2) > composite_count(6230)
  21. # f(4) > composite_count(5212)
  22. func isok(n, k) {
  23. ncomposites(k, n.composite).join.to_i.is_prob_prime
  24. }
  25. assert(isok(3, 2))
  26. assert(isok(5, 646))
  27. assert(isok(7, 6))
  28. assert(isok(8, 14))
  29. assert(isok(9, 302))
  30. assert(isok(10, 24))
  31. assert(isok(12, 6))
  32. func f(n, i=n.composite) {
  33. var c = n.composite
  34. var str = (c..i -> grep { .is_composite }.join)
  35. c = i
  36. loop {
  37. say "[n = #{n}] Testing: #{c} (len: #{str.len})"
  38. if (str.to_i.is_prob_prime) {
  39. var r = composite_count(n.composite, c)
  40. say "Found: f(#{n}) = #{r}"
  41. return r
  42. }
  43. c.next_composite!
  44. str += c.to_s
  45. }
  46. }
  47. #say f(16)
  48. say f(1, 9938)
  49. #say f(1, 6000)
  50. #say f(5, 776)