prog.sf 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #!/usr/bin/ruby
  2. # a(n) is the smallest n-gonal pyramidal number which can be represented as the sum of n distinct nonzero n-gonal pyramidal numbers in exactly n ways, or -1 if none exists.
  3. # https://oeis.org/A359321
  4. # For n = 3: 2300 = 1 + 969 + 1330 = 56 + 220 + 2024 = 165 + 364 + 1771.
  5. # For n = 4: 6201 = 1 + 91 + 1785 + 4324 = 1 + 285 + 1015 + 4900 = 30 + 140 + 506 + 5525 = 91 + 819 + 1496 + 3795.
  6. # Known terms:
  7. # 2300, 6201, 8125, 6391
  8. # Conjecture:
  9. # a(7)-a(11) are all -1.
  10. func isok(index, k) {
  11. var n = index.pyramidal(k)
  12. var arr = (1..^index -> map{|j| pyramidal(j, k) })
  13. var s = Set(arr...)
  14. var sol = []
  15. arr.combinations(k-1, {|*a|
  16. with (n - a.sum) {|d|
  17. if (s.has(d) && !a.has(d)) {
  18. sol << a
  19. }
  20. }
  21. })
  22. sol.map {|a| [a..., n - a.sum].sort }.uniq
  23. }
  24. func a(n) {
  25. for k in (1..Inf) {
  26. var sol = isok(k, n)
  27. if (sol.len == n) {
  28. return [n, k, k.pyramidal(n)]
  29. }
  30. elsif (sol.len > n) {
  31. say "[#{n}] Found #{sol.len} solutions for k = #{k}..."
  32. }
  33. }
  34. }
  35. for k in (3..6) {
  36. say a(k)
  37. }
  38. #~ say a(12)
  39. __END__
  40. [7] Found 8 solutions for k = 22...
  41. [7] Found 15 solutions for k = 26...
  42. [7] Found 9 solutions for k = 27...
  43. [7] Found 18 solutions for k = 28...
  44. [7] Found 12 solutions for k = 29...
  45. [7] Found 20 solutions for k = 30...
  46. [7] Found 27 solutions for k = 31...
  47. [7] Found 44 solutions for k = 32...
  48. [7] Found 42 solutions for k = 33...
  49. [7] Found 46 solutions for k = 34...
  50. [7] Found 46 solutions for k = 35...
  51. [7] Found 70 solutions for k = 36...
  52. [7] Found 85 solutions for k = 37...
  53. [7] Found 81 solutions for k = 38...
  54. [7] Found 88 solutions for k = 39...
  55. [8] Found 10 solutions for k = 23...
  56. [8] Found 18 solutions for k = 24...
  57. [8] Found 14 solutions for k = 25...
  58. [8] Found 24 solutions for k = 26...
  59. [8] Found 17 solutions for k = 27...
  60. [8] Found 28 solutions for k = 28...
  61. [8] Found 53 solutions for k = 29...
  62. [9] Found 14 solutions for k = 26...
  63. [9] Found 23 solutions for k = 27...
  64. [9] Found 22 solutions for k = 28...
  65. [9] Found 36 solutions for k = 29...
  66. [10] Found 11 solutions for k = 26...
  67. [10] Found 17 solutions for k = 27...
  68. [10] Found 11 solutions for k = 28...
  69. [10] Found 34 solutions for k = 29...
  70. [11] Found 12 solutions for k = 27...
  71. [11] Found 15 solutions for k = 29...
  72. [11] Found 32 solutions for k = 30...
  73. [12] Found 33 solutions for k = 31...