Faulhaber's formula: Difference between revisions
Content deleted Content added
SqrtNegInf (talk | contribs) m →{{header|Perl 6}}: removed 'cached', no performance benefit |
Added Julia language |
||
Line 576: | Line 576: | ||
8 : 1/9n^9 + 1/2n^8 + 2/3n^7 - 7/15n^5 + 2/9n^3 - 1/30n |
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> |
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}}== |
=={{header|Kotlin}}== |