Permutations/Derangements: Difference between revisions
m
→{{header|Phix}}: bigatom -> mpfr
m (→{{header|F_Sharp|F#}}: Remove some surplus spaces) |
m (→{{header|Phix}}: bigatom -> mpfr) |
||
Line 2,411:
=={{header|Phix}}==
{{libheader|
<lang Phix>function deranged(sequence s1, sequence s2)
for i=1 to length(s1) do
Line 2,432:
function subfactorial(integer n)
if n<
if n=1 then return 0 end if▼
return (n-1)*(subfactorial(n-1)+subfactorial(n-2))
end function
Line 2,441 ⟶ 2,440:
printf(1,"%d: counted:%d, calculated:%d\n",{n,length(derangements(n)),subfactorial(n)})
end for
string msg = iff(machine_bits()=32?" (incorrect on 32-bit!)":"") -- (fine on 64-bit)
printf(1,"!20=%d
function ba_subfactorial(integer n)▼
include mpfr.e
-- probably not the most efficient way to do this!
mpz f = mpz_init(mpz_sub_factorial(n-1)),
g = mpz_init(mpz_sub_factorial(n-2))
mpz_add(f,f,g)
mpz_mul_si(f,f,n-1)
string res = mpz_get_str(f)
{f,g} = mpz_clear({f,g})
return res
end function
{{out}}
<pre>
Line 2,462 ⟶ 2,469:
8: counted:14833, calculated:14833
9: counted:133496, calculated:133496
!20=895014631192902186 (incorrect on 32-bit!)
!20=895014631192902121 (
</pre>
|