Faulhaber's triangle: Difference between revisions
Content added Content deleted
(Added solution for Pascal.) |
No edit summary |
||
Line 3,366: | Line 3,366: | ||
-1/30 0 2/9 0 -7/15 0 2/3 1/2 1/9 |
-1/30 0 2/9 0 -7/15 0 2/3 1/2 1/9 |
||
0 -3/20 0 1/2 0 -7/10 0 3/4 1/2 1/10</pre> |
0 -3/20 0 1/2 0 -7/10 0 3/4 1/2 1/10</pre> |
||
=={{header|Vlang}}== |
|||
{{trans|Go}} |
|||
<lang vlang>import math.fractions |
|||
import math.big |
|||
fn bernoulli(n int) fractions.Fraction { |
|||
mut a := []fractions.Fraction{len: n+1} |
|||
for m,_ in a { |
|||
a[m] = fractions.fraction(1, i64(m+1)) |
|||
for j := m; j >= 1; j-- { |
|||
mut d := a[j-1] |
|||
d = fractions.fraction(i64(j),i64(1)) * (d-a[j]) |
|||
a[j-1]=d |
|||
} |
|||
} |
|||
// return the 'first' Bernoulli number |
|||
if n != 1 { |
|||
return a[0] |
|||
} |
|||
a[0] = a[0].negate() |
|||
return a[0] |
|||
} |
|||
fn binomial(n int, k int) i64 { |
|||
if n <= 0 || k <= 0 || n < k { |
|||
return 1 |
|||
} |
|||
mut num, mut den := i64(1), i64(1) |
|||
for i := k + 1; i <= n; i++ { |
|||
num *= i64(i) |
|||
} |
|||
for i := 2; i <= n-k; i++ { |
|||
den *= i64(i) |
|||
} |
|||
return num / den |
|||
} |
|||
fn faulhaber_triangle(p int) []fractions.Fraction { |
|||
mut coeffs := []fractions.Fraction{len: p+1} |
|||
q := fractions.fraction(1, i64(p)+1) |
|||
mut t := fractions.fraction(1,1) |
|||
mut u := fractions.fraction(1,1) |
|||
mut sign := -1 |
|||
for j,_ in coeffs { |
|||
sign *= -1 |
|||
mut d := coeffs[p-j] |
|||
t=fractions.fraction(i64(sign),1) |
|||
u = fractions.fraction(binomial(p+1, j),1) |
|||
d=q*t |
|||
d*=u |
|||
d*=bernoulli(j) |
|||
coeffs[p-j]=d |
|||
} |
|||
return coeffs |
|||
} |
|||
fn main() { |
|||
for i in 0..10 { |
|||
coeffs := faulhaber_triangle(i) |
|||
for coeff in coeffs { |
|||
print("${coeff:5} ") |
|||
} |
|||
println('') |
|||
} |
|||
println('') |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
1/1 |
|||
1/2 1/2 |
|||
1/6 1/2 1/3 |
|||
0/1 1/4 1/2 1/4 |
|||
-1/30 0/1 1/3 1/2 1/5 |
|||
0/1 -1/12 0/1 5/12 1/2 1/6 |
|||
1/42 0/1 -1/6 0/1 1/2 1/2 1/7 |
|||
0/1 1/12 0/1 -7/24 0/1 7/12 1/2 1/8 |
|||
-1/30 0/1 2/9 0/1 -7/15 0/1 2/3 1/2 1/9 |
|||
0/1 -3/20 0/1 1/2 0/1 -7/10 0/1 3/4 1/2 1/10 |
|||
</pre> |
|||
=={{header|Wren}}== |
=={{header|Wren}}== |