// you’re reading...
1 Star2 Stars3 Stars4 Stars5 Stars (17 votes, average: 5.00 out of 5)

Project Euler Solutions

Project Euler 33 Solution

Project Euler 33 Solution

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.


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.
download arrowUse this link to get the Project Euler 33 Solution Python 2.7 source.


  • Added the float function to keep calculations from converting to integers.
Project Euler 33 Solution last updated


8 Responses to “Project Euler 33 Solution”

  1. Oh okey i understund it now 😉
    Thank so much :

    Posted by Mellatora | February 1, 2012, 2:07 PM
  2. In order to keep the math in floating point as Python defaults to integer and rounds the result from divisions.

    Posted by Christner | January 30, 2012, 2:26 PM
  3. i can’t understund why are you using “float”

    when i delet it ,the solution become 80

    Posted by Mellatora | January 28, 2012, 7:17 AM
  4. 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:

    Posted by Francky | May 19, 2011, 1:27 PM
  5. instead of (ij/ki == float(j)/k)
    (k*ij == ki*j) is a better test, all integers.

    Posted by Francky | April 29, 2011, 5:41 PM
  6. Thanks, Rudy!

    Posted by Mike | March 3, 2011, 1:29 PM
  7. Nice solution Mike!

    Posted by Rudy | February 17, 2011, 7:40 AM

Post a comment