I believe Dave answered the OP's intended question. On Apr 3, 2013 9:54 PM, "Dave Angel" <da...@davea.name> wrote:
> On 04/03/2013 09:53 PM, Steven D'Aprano wrote: > >> On 04/04/13 12:29, bessenkphilip wrote: >> >>> Hi all, >>> >>> I'm having a doubt in the below program's 2n'd "for" loop. >>> >>> for n in range(2, 10): >>>>>> >>>>> ... for x in range(2, n): >>> ... if n % x == 0: >>> ... print n, 'equals', x, '*', n/x >>> ... break >>> ... else: >>> ... # loop fell through without finding a factor >>> ... print n, 'is a prime number' >>> ... >>> 2 is a prime number >>> 3 is a prime number >>> 4 equals 2 * 2 >>> 5 is a prime number >>> 6 equals 2 * 3 >>> 7 is a prime number >>> 8 equals 2 * 4 >>> 9 equals 3 * 3 >>> >>> My doubt is that "will 'x' be always of value 2, if so why that for >>> loop "for x in range(2, n):" >>> i don't know how the first output , as If 2%2==0:(this satisfies the >>> if loop as x =2) , so how the else part came to output i.e 2 is a >>> prime number. >>> >> >> I'm sorry, I don't understand your question. >> >> x is *not* always of value 2. You can see with the last line, >> >> 9 equals 3 * 3 >> >> x has value 3. >> >> >> The outer loop just checks 2, 3, 4, ... 9 to see whether they are prime. >> The inner loop actually does the checking: >> >> >> for x in range(2, n): >> if n % x == 0: >> print n, 'equals', x, '*', n/x >> break >> >> >> This tests whether n is divisible by 2, 3, 4, 5, 6, ... up to n-1. If n >> is divisible by any of those numbers, then n cannot be prime. >> >> For example, with n = 9, the inner loop does this: >> >> x = 2 >> Test if 2 is a factor: does 9/2 have remainder zero? No. >> x = 3 >> Test if 3 is a factor: does 9/3 have remainder zero? Yes. >> So 9 is not prime, and 9 = 3 * (9/3) = 3 * 3 >> >> >> If we test it with n = 35, the inner loop would do this: >> >> x = 2 >> Test if 2 is a factor: does 35/2 have remainder zero? No. >> x = 3 >> Test if 3 is a factor: does 35/3 have remainder zero? No. >> x = 4 >> Test if 4 is a factor: does 35/4 have remainder zero? No. >> x = 5 >> Test if 5 is a factor: does 35/5 have remainder zero? Yes. >> So 35 is not prime, and 35 = 5 * (35/5) = 5 * 7 >> >> >> >> Notice that this does more work than necessary! Can you see what work it >> does that is unnecessary? >> >> (Hint: what even numbers are prime?) >> >> >> >> >> > I don't understand the questions either, but I can point out one thing > that might be puzzling the OP: > > When n is 2, the inner loop does nothing, it just skips to the else > clause. The reason is that range(2,2) is a null iterator. range(i,j) > produces values from i to j-1, or to put it another way values for which > i <= n < j > > If i and j are identical, there's nothing to match it. > > > -- > DaveA > ______________________________**_________________ > Tutor maillist - Tutor@python.org > To unsubscribe or change subscription options: > http://mail.python.org/**mailman/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor> >
_______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor