Jump to content

Faulhaber's triangle: Difference between revisions

→‎{{header|Sidef}}: added an alternative solution
(→‎{{header|Sidef}}: added an alternative solution)
Line 1,794:
}
 
#
## First 10 rows of Faulhaber's triangle:
#
{ |p|
say faulhaber_triangle(p).map{ '%6s' % .as_rat }.join
} << 1..10
 
#
## Extra credit:
#
const p = 17
const n = 1000
Line 1,823 ⟶ 1,817:
 
56056972216555580111030077961944183400198333273050000
</pre>
 
Alternative solution:
<lang ruby>func find_poly_degree(a) {
var c = 0
loop {
++c
a = a.map_cons(2, {|n,k| n-k })
return 0 if a.is_empty
return c if a.all { .is_zero }
}
}
 
func faulhaber_triangle(n) {
var a = (0..(n+2) -> accumulate { _**n })
var c = find_poly_degree(a)
 
var A = c.of {|n|
c.of {|k| n**k }
}
 
A.msolve(a).slice(1)
}
 
10.times { say faulhaber_triangle(_) }</lang>
{{out}}
<pre>
[1]
[1/2, 1/2]
[1/6, 1/2, 1/3]
[0, 1/4, 1/2, 1/4]
[-1/30, 0, 1/3, 1/2, 1/5]
[0, -1/12, 0, 5/12, 1/2, 1/6]
[1/42, 0, -1/6, 0, 1/2, 1/2, 1/7]
[0, 1/12, 0, -7/24, 0, 7/12, 1/2, 1/8]
[-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>
 
2,747

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.