smallest_k-gonal_inverse.sf 756 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #!/usr/bin/ruby
  2. # Daniel "Trizen" Șuteu
  3. # Date: 08 March 2018
  4. # https://github.com/trizen
  5. # Given an integer `n`, find the smallest integer k>=3 such that `n` is a k-gonal number.
  6. # Example:
  7. # a(12) = 5 since 12 is a pentagonal number, but not a square or triangular.
  8. # See also:
  9. # https://oeis.org/A176774
  10. func smallest_k_gonal_inverse (n) {
  11. var divisors = (2*n).divisors
  12. divisors.shift
  13. divisors.pop
  14. divisors.reverse.each { |d|
  15. var t = (d - 1)
  16. var k = (2*n / d + 2*d - 4)
  17. if (t `divides` k) {
  18. var z = k/t
  19. if (z>2 && z<n) {
  20. return k/t
  21. }
  22. }
  23. }
  24. return n
  25. }
  26. for n in (4000 .. 4030) {
  27. say "a(#{n}) = #{smallest_k_gonal_inverse(n)}"
  28. }