Ordered fractions
Problem 071: Ordered fractions
Consider the fraction, n/d
, where n
and d
are positive integers. If n<d
and HCF(n,d)=1
,
it is called a reduced proper fraction.
If we list the set of reduced proper fractions for d <= 8
in ascending order of size, we get:
1/8, 1/7, 1/6, 1/5, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7, 1/2, 4/7, 3/5, 5/8, 2/3, 5/7, 3/4, 4/5, 5/6, 6/7, 7/8
It can be seen that 2/5
is the fraction immediately to the left of 3/7
.
By listing the set of reduced proper fractions for d <= 1,000,000
in ascending order of size,
find the numerator of the fraction immediately to the left of 3/7
.
Solution:
X X ????
>020p040p121p141p"}}@"**60pv
v0 < >01+*v
>1+ :3*7%!#v_:61p:3*7/:71p7*61g3*-:0`| >81p61g7*91p41g91g*21g81g*`#v_v
|-g06: < <>01-*^v p04g16p02g17p12g19p14g18<
>$20g."/ ",,55+,40g.@ ^ < <
Explanation:
For every denominator from 1
to 1 000 000
we generate a possible fraction where the numerator is (d * 3) / 7
.
(Every other fraction is either greater than 3/7
or has a greater difference than the generated).
Now everything thats left is finding the fraction with the smallest difference to 3/7
.
The difference of two fractions is calculated (without floating points) by:
n1/d1 - n2/d2 == (n1*d2 - n2*d1)/(d1*d2)
The rest is just iterating through all the possible fractions and in each step remembering the current best.
We don't even need to reduce the result to get a proper fraction. If it could be reduced we would have got the reduced version first. (Because it has an smaller denominator).
Interpreter steps: | 77 428 679 |
Execution time (BefunExec): | 11s (6.46 MHz) |
Program size: | 73 x 8 (fully conform befunge-93) |
Solution: | 428570 |
Solved at: | 2015-08-19 |