Special factorials: Difference between revisions
Content added Content deleted
m (→{{header|REXX}}: eliminated the need for abutment.) |
(→{{header|Wren}}: More efficient.) |
||
Line 247: | Line 247: | ||
<lang ecmascript>import "/big" for BigInt |
<lang ecmascript>import "/big" for BigInt |
||
import "/fmt" for Fmt |
import "/fmt" for Fmt |
||
var f = Fn.new { |n| |
|||
⚫ | |||
⚫ | |||
⚫ | |||
return fact |
|||
} |
|||
var sf = Fn.new { |n| |
var sf = Fn.new { |n| |
||
if (n < 2) return BigInt.one |
if (n < 2) return BigInt.one |
||
var sfact = BigInt.one |
var sfact = BigInt.one |
||
var fact = BigInt.one |
|||
for (i in 2..n) { |
|||
⚫ | |||
sfact = sfact * fact |
|||
} |
|||
return sfact |
return sfact |
||
} |
} |
||
Line 272: | Line 269: | ||
if (n < 1) return BigInt.zero |
if (n < 1) return BigInt.zero |
||
var afact = BigInt.zero |
var afact = BigInt.zero |
||
⚫ | |||
var sign = (n%2 == 0) ? -1 : 1 |
var sign = (n%2 == 0) ? -1 : 1 |
||
for (i in 1..n) { |
for (i in 1..n) { |
||
fact = fact * i |
|||
afact = afact + fact * sign |
|||
sign = -sign |
sign = -sign |
||
} |
} |
||
Line 288: | Line 287: | ||
var rf = Fn.new { |n| |
var rf = Fn.new { |n| |
||
var i = 0 |
var i = 0 |
||
⚫ | |||
while (true) { |
while (true) { |
||
⚫ | |||
if (fact == n) return i |
if (fact == n) return i |
||
if (fact > n) return "none" |
if (fact > n) return "none" |
||
i = i + 1 |
i = i + 1 |
||
⚫ | |||
} |
} |
||
} |
} |