Fractran: Difference between revisions

Content added Content deleted
m (added some comments)
Line 2,546: Line 2,546:
=={{header|Phix}}==
=={{header|Phix}}==
Using the same ideas as the Fortran entry (thanks!).
Using the same ideas as the Fortran entry (thanks!).

For example, suppose that known_factors happens to be {2,3,5}. [the exact order may vary]<br>
2 is held as {1,0,0}, ie 2^1 * 3^0 * 5^0, and 15 as {0,1,1}, ie 2^0 * 3^1 * 5^1.

Notice that 2, being a power of 2, has zero in all slots other than 2.<br>
We can say that 15 is not exactly divisible by 2 because the power of 2 is too large.<br>
Division (to whole integer) is performed simply by subtracting the corresponding powers.

<lang Phix>constant steps = 20,
<lang Phix>constant steps = 20,
primes = 20
primes = 20
Line 2,579: Line 2,587:


function combine_factors(sequence n)
function combine_factors(sequence n)
-- (inverse of as_primes)
atom res = 1
atom res = 1
for i=1 to length(n) do
for i=1 to length(n) do
Line 2,633: Line 2,642:
if n=0 then exit end if
if n=0 then exit end if
n0[k2] = n[k2]
n0[k2] = n[k2]
if n=n0 then
if n=n0 then -- (ie all non-2 are 0)
-- and the prime itself is ready and waiting...
res = append(res,n[k2])
res = append(res,n[k2])
end if
end if