Faulhaber's formula: Difference between revisions

Added Julia language
m (→‎{{header|Perl 6}}: removed 'cached', no performance benefit)
(Added Julia language)
Line 576:
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|Julia}}==
{{trans|Kotlin}}
 
'''Module''':
<lang julia>module Faulhaber
 
function bernoulli(n::Integer)
n ≥ 0 || throw(DomainError(n, "n must be a positive-or-0 number"))
a = fill(0 // 1, n + 1)
for m in 1:n
a[m] = 1 // (m + 1)
for j in m:-1:2
a[j - 1] = (a[j - 1] - a[j]) * j
end
end
return ifelse(n != 1, a[1], -a[1])
end
 
const _exponents = collect(Char, "⁰¹²³⁴⁵⁶⁷⁸⁹")
toexponent(n) = join(_exponents[reverse(digits(n)) .+ 1])
 
function formula(p::Integer)
print(p, ": ")
q = 1 // (p + 1)
s = -1
for j in 0:p
s *= -1
coeff = q * s * binomial(p + 1, j) * bernoulli(j)
iszero(coeff) && continue
if iszero(j)
print(coeff == 1 ? "" : coeff == -1 ? "-" : "$coeff")
else
print(coeff == 1 ? " + " : coeff == -1 ? " - " : coeff > 0 ? " + $coeff " : " - $(-coeff) ")
end
pwr = p + 1 - j
if pwr > 1
print("n", toexponent(pwr))
else
print("n")
end
end
println()
end
 
end # module Faulhaber</lang>
 
'''Main''':
<lang julia>Faulhaber.formula.(1:10)</lang>
 
{{out}}
<pre>1: + 1//2 n
2: + 1//2 n² + 1//3 n
3: + 1//2 n³ + 1//2 n² - 1//6 n
4: + 1//2 n⁴ + 2//3 n³ - 1//3 n² + 1//30 n
5: + 1//2 n⁵ + 5//6 n⁴ - 5//9 n³ + 1//12 n² + 1//30 n
6: + 1//2 n⁶ + n⁵ - 5//6 n⁴ + 1//6 n³ + 1//10 n² - 1//42 n
7: + 1//2 n⁷ + 7//6 n⁶ - 7//6 n⁵ + 7//24 n⁴ + 7//30 n³ - 1//12 n² - 1//42 n
8: + 1//2 n⁸ + 4//3 n⁷ - 14//9 n⁶ + 7//15 n⁵ + 7//15 n⁴ - 2//9 n³ - 2//21 n² + 1//30 n
9: + 1//2 n⁹ + 3//2 n⁸ - 2//1 n⁷ + 7//10 n⁶ + 21//25 n⁵ - 1//2 n⁴ - 2//7 n³ + 3//20 n² + 1//30 n
10: + 1//2 n¹⁰ + 5//3 n⁹ - 5//2 n⁸ + n⁷ + 7//5 n⁶ - n⁵ - 5//7 n⁴ + 1//2 n³ + 1//6 n² - 5//66 n</pre>
 
=={{header|Kotlin}}==
Anonymous user