Faulhaber's formula: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) (Rename Perl 6 -> Raku, alphabetize, minor clean-up) |
|||
Line 2,267: | Line 2,267: | ||
f(9) = 1/10 * (n^10 + (5/1)*n^9 + (15/2)*n^8 + (-7/1)*n^6 + (5/1)*n^4 + (-3/2)*n^2) |
f(9) = 1/10 * (n^10 + (5/1)*n^9 + (15/2)*n^8 + (-7/1)*n^6 + (5/1)*n^4 + (-3/2)*n^2) |
||
</pre> |
</pre> |
||
=={{header|Ruby}}== |
|||
{{trans|C}} |
|||
<lang ruby>def binomial(n,k) |
|||
if n < 0 or k < 0 or n < k then |
|||
return -1 |
|||
end |
|||
if n == 0 or k == 0 then |
|||
return 1 |
|||
end |
|||
num = 1 |
|||
for i in k+1 .. n do |
|||
num = num * i |
|||
end |
|||
denom = 1 |
|||
for i in 2 .. n-k do |
|||
denom = denom * i |
|||
end |
|||
return num / denom |
|||
end |
|||
def bernoulli(n) |
|||
if n < 0 then |
|||
raise "n cannot be less than zero" |
|||
end |
|||
a = Array.new(16) |
|||
for m in 0 .. n do |
|||
a[m] = Rational(1, m + 1) |
|||
for j in m.downto(1) do |
|||
a[j-1] = (a[j-1] - a[j]) * Rational(j) |
|||
end |
|||
end |
|||
if n != 1 then |
|||
return a[0] |
|||
end |
|||
return -a[0] |
|||
end |
|||
def faulhaber(p) |
|||
print("%d : " % [p]) |
|||
q = Rational(1, p + 1) |
|||
sign = -1 |
|||
for j in 0 .. p do |
|||
sign = -1 * sign |
|||
coeff = q * Rational(sign) * Rational(binomial(p+1, j)) * bernoulli(j) |
|||
if coeff == 0 then |
|||
next |
|||
end |
|||
if j == 0 then |
|||
if coeff != 1 then |
|||
if coeff == -1 then |
|||
print "-" |
|||
else |
|||
print coeff |
|||
end |
|||
end |
|||
else |
|||
if coeff == 1 then |
|||
print " + " |
|||
elsif coeff == -1 then |
|||
print " - " |
|||
elsif 0 < coeff then |
|||
print " + " |
|||
print coeff |
|||
else |
|||
print " - " |
|||
print -coeff |
|||
end |
|||
end |
|||
pwr = p + 1 - j |
|||
if pwr > 1 then |
|||
print "n^%d" % [pwr] |
|||
else |
|||
print "n" |
|||
end |
|||
end |
|||
print "\n" |
|||
end |
|||
def main |
|||
for i in 0 .. 9 do |
|||
faulhaber(i) |
|||
end |
|||
end |
|||
main()</lang> |
|||
{{out}} |
|||
<pre>0 : n |
|||
1 : 1/2n^2 + 1/2n |
|||
2 : 1/3n^3 + 1/2n^2 + 1/6n |
|||
3 : 1/4n^4 + 1/2n^3 + 1/4n^2 |
|||
4 : 1/5n^5 + 1/2n^4 + 1/3n^3 - 1/30n |
|||
5 : 1/6n^6 + 1/2n^5 + 5/12n^4 - 1/12n^2 |
|||
6 : 1/7n^7 + 1/2n^6 + 1/2n^5 - 1/6n^3 + 1/42n |
|||
7 : 1/8n^8 + 1/2n^7 + 7/12n^6 - 7/24n^4 + 1/12n^2 |
|||
8 : 1/9n^9 + 1/2n^8 + 2/3n^7 - 7/15n^5 + 2/9n^3 - 1/30n |
|||
9 : 1/10n^10 + 1/2n^9 + 3/4n^8 - 7/10n^6 + 1/2n^4 - 3/20n^2</pre> |
|||
=={{header|Sidef}}== |
=={{header|Sidef}}== |