*Source code available on GitHub.*

This problem seems simpler than the last few to me.

It’s fairly clear how to proceed. We can just check every multiple of 20, starting at 20 and adding 20 every time. If the multiple is divisible by all of the numbers 1 through 19, we stop and print the output.

To check every multiple of 20 indefinitely, we use a `while` loop:

i = 20 while True: # Check stuff here i += 20

To check whether `i`

is divisible by all the numbers 19, 18, 17 and so on, we just do a `for`

loop:

for j in range(19,0,-1): if i % j != 0: # Failed test # Passed test

Note that in the `range`

function we’re starting at 20 and going down to 1 rather than the other way round (the `-1`

tells `range()`

to add `-1`

each time rather than `1`

): this is more efficient as it’s much less likely for a number to be divisible by, say, 19 than it is for it to be divisible by, say, 3.

The number `i`

has only passed the test if we get through the whole for loop without the `if`

statement ever being triggered. We only want to do the increment and try again if `i` fails the check, so we put `i += 20`

*inside* the `if`

statement:

i = 20 while True: for j in range(19,0,-1): if i % j != 0: i += 20 break

The `break`

statement forces us out of the `for`

loop and consequently restarts the `while`

loop with the new value of `i`

.

Now, if we do indeed get to the end of the `for`

loop with every `j`

being a factor of `i`

, the current value of `j`

will be `1`

(as the `for`

loop iterates downwards). Hence, if this is the case, `i`

is our answer. We’ll hold it in some other variable `smallest_multiple`

and break out of the `for loop:`

i = 20 while True: for j in range(19,0,-1): if i % j != 0: i += 20 break if j == 1: # If checked all of them and still here smallest_multiple = i break

The last thing to do is check whether `smallest_multiple`

actually holds a value, and if so break out of the whole `while`

loop and print it off. We’ll set `smallest_multiple = 0`

initially to help us.

We’re done! Code below:

smallest_multiple = 0 i = 20 while True: for j in range(19,0,-1): if i % j != 0: i += 20 break if j == 1: # If checked all of them and still here smallest_multiple = i break if smallest_multiple != 0: break print(smallest_multiple)