Is_prime: worried didn't do it right


Not stuck at this exercise, just concerned I didn't do it in the most efficient way: Judging by the fact that I had to specify results for specific values, and the fact that the instructions specify using [x-1] at some, point, it just doesn't seem elegant:

def is_prime(x)
    if x > 2:
        return False
    elif x == 2:
        return True
        for n in range(2, x):
            if x % n == 0:
                return False
            return True

So yeah, nothing much, just want to know if I did it how I was supposed to.


This I took to mean range(2, x).

Remove that and the both else: and 2 will fall through to,

return True

No need to break since it returns. break is unreachable after return, anyway.

There are other ways we can write this program, and no doubt more efficient. It is discussed at length in the track if you did around. Consider some of the following:

  • What should the range actually be?

  • How would we make the range contain only odd numbers?


if x is GREATER than 2, return False?
x==2 returning True, I understand.
if x is evenly divisible by n, return False?
5 divided by 5 is an even division (5 is a prime number, the answer is 1).

HOW is this the answer?


Was waiting for someone to point this out (or the OP to discover it).

That is the correct return, False. x cannot be divisible by any n (save itself and 1, but n will never be x in the loop, only x - 1).

This is not a proof of primeness. The fact that neither 2 nor 3 will divide into 5 is what proves it is prime.


This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.