Project Euler 33: Discover all the fractions with an unorthodox cancelling method.
Problem Description
The fraction 49/98 is a curious fraction, as an inexperienced mathematician in attempting to simplify it may incorrectly believe that 49/98 = 4/8, which is correct, is obtained by cancelling the 9s.
We shall consider fractions like, 30/50 = 3/5, to be trivial examples.
There are exactly four non-trivial examples of this type of fraction, less than one in value, and containing two digits in the numerator and denominator.
If the product of these four fractions is given in its lowest common terms, find the value of the denominator.
Analysis
This is a curious problem and was able to solve it in just a few lines and 36 iterations. Just generate all fractions with 2 digit numerators and denominators and ignore ‘trivial’ examples. Use symmetry to consider distinct fractions – which is really not necessary, but…why not.
Project Euler 33 Solution
Runs < 0.001 seconds in Python 2.7.Use this link to get the Project Euler 33 Solution Python 2.7 source.
Comments
- Added the float function to keep calculations from converting to integers.
Oh okey i understund it now 😉
Thank so much :
In order to keep the math in floating point as Python defaults to integer and rounds the result from divisions.
i can’t understund why are you using “float”
when i delet it ,the solution become 80
faster again:
num = den = 1
for a in range(1,10):
for b in range(1,a):
q, r = divmod(9*b*a, 10*b-a)
if not r and q≤9:
num*=a
den*=b
instead of (ij/ki == float(j)/k)
(k*ij == ki*j) is a better test, all integers.
That was a clever suggestion. Thanks, I’ve changed the code accordingly.
Thanks, Rudy!
Nice solution Mike!