prog.sf 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #!/usr/bin/ruby
  2. # Numbers that are the sum of m = 5 successive primes and also the product of m = 5 (other) successive primes.
  3. # https://oeis.org/A323052
  4. var a = [
  5. 2775683761181, 10945513774549181, 31285407706348267, 43861128120750079, 100441814079170659, 159395121707397143, 402260157804827743, 1340537842364790347, 4738876023641493659, 16292356006439865799, 27911122766554363873
  6. ]
  7. # 27911122766554363873
  8. # 27911122766554363847
  9. # 27911122766554364033
  10. # 27911122766554363847
  11. # 27911122766554364033
  12. # sum(5582224553310872717, 5582224553310872743, 5582224553310872749, 5582224553310872771, 5582224553310872867)
  13. # sum(5582224553310872743, 5582224553310872749, 5582224553310872771, 5582224553310872867, 5582224553310872903)
  14. func is_sum(n) {
  15. var k = floor(n/5)
  16. loop {
  17. if (k.is_prime) {
  18. var r = 5.of { k }.map_reduce{|a| a.next_prime }.sum
  19. if (r < n) {
  20. #die "not ok: #{n} -- #{k}"
  21. return false
  22. }
  23. if (r == n) {
  24. #say "#{n} = sum(#{r})";
  25. #break
  26. return true
  27. }
  28. }
  29. k.prev_prime!
  30. }
  31. }
  32. STDOUT.autoflush(1)
  33. for p in (primes(100000)) {
  34. var n = 5.of { p }.map_reduce{ .next_prime }.prod
  35. if (is_sum(n)) {
  36. print(n, ", ")
  37. }
  38. }
  39. __END__
  40. a.each {|n|
  41. var f = n.factor
  42. assert_eq(5.of { f[0] }.map_reduce {|a| a.next_prime }, f)
  43. var k = floor(n/5)
  44. loop {
  45. if (k.is_prime) {
  46. var r = 5.of { k }.map_reduce{|a| a.next_prime }
  47. if (r.sum < n) {
  48. die "not ok: #{n} -- #{k}"
  49. }
  50. if (r.sum == n) {
  51. say "#{n} = sum(#{r})";
  52. break
  53. }
  54. }
  55. k.prev_prime!
  56. }
  57. }