#!/usr/bin/ruby
#
## https://rosettacode.org/wiki/Faulhaber%27s_formula
#
func faulhaber_s_formula(p) {
var formula = gather {
{ |j|
take "#{binomial(p+1, j) * bern(j,1) -> as_rat}*x^#{p+1 - j}"
} << 0..p
}
var str = Poly(formula.join(' + ')).to_s
str = "1/#{p+1} * (#{str})"
return str
}
{ |p|
printf("%2d: %s\n", p, faulhaber_s_formula(p))
} << ^10