## 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.

#### Answer

Slowly swipe from either end beginning with the white vertical bar to get an idea of the starting or ending digits. For less drama, just double click the answer area. The distance between the two bars will give you an idea of the magnitude. Touch devices can tap and hold the center of the box between the two bars and choose*define*to reveal the answer.

#### Comments

- Added the float function to keep calculations from converting to integers.

*Project Euler 33 Solution last updated*

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!