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 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
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.
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
i = 20 while True: for j in range(19,0,-1): if i % j != 0: i += 20 break
break statement forces us out of the
for loop and consequently restarts the
while loop with the new value of
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
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)