Special factorials: Difference between revisions

→‎{{header|Wren}}: More efficient.
m (→‎{{header|REXX}}: eliminated the need for abutment.)
(→‎{{header|Wren}}: More efficient.)
Line 247:
<lang ecmascript>import "/big" for BigInt
import "/fmt" for Fmt
 
var f = Fn.new { |n|
if (n < 2) return BigInt.one
var fact = BigInt.one
for (i in 2..n) fact = fact * i
return fact
}
 
var sf = Fn.new { |n|
if (n < 2) return BigInt.one
var sfact = BigInt.one
forvar (ifact in 2..n) sfact = sfact * fBigInt.call(i)one
for (i in 2..n) {
for (i in 2..n) fact = fact * i
sfact = sfact * fact
}
return sfact
}
Line 272 ⟶ 269:
if (n < 1) return BigInt.zero
var afact = BigInt.zero
ifvar (nfact < 2) return= BigInt.one
var sign = (n%2 == 0) ? -1 : 1
for (i in 1..n) {
afactfact = afactfact +* f.call(i) * sign
afact = afact + fact * sign
sign = -sign
}
Line 288 ⟶ 287:
var rf = Fn.new { |n|
var i = 0
var fact = BigInt.one
while (true) {
var fact = f.call(i)
if (fact == n) return i
if (fact > n) return "none"
i = i + 1
var fact = f.call(fact * i)
}
}
9,490

edits