prog_check.sf 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. var a = []
  41. ARGF.each {|line|
  42. a << line.nums[1]
  43. }
  44. say "Terms: #{a.len}"
  45. a.each {|n|
  46. var f = n.factor
  47. assert_eq(5.of { f[0] }.map_reduce {|a| a.next_prime }, f)
  48. var k = floor(n/5)
  49. loop {
  50. if (k.is_prime) {
  51. var r = 5.of { k }.map_reduce{|a| a.next_prime }
  52. if (r.sum < n) {
  53. die "not ok: #{n} -- #{k}"
  54. }
  55. if (r.sum == n) {
  56. say "#{n} = sum(#{r})";
  57. break
  58. }
  59. }
  60. k.prev_prime!
  61. }
  62. }