My backwards logic

Seymore4Head Seymore4Head at Hotmail.invalid
Fri Sep 5 18:36:59 EDT 2014


On Fri, 5 Sep 2014 15:14:41 -0700, Chris Kaynor
<ckaynor at zindagigames.com> wrote:

>On Fri, Sep 5, 2014 at 2:49 PM, Seymore4Head <Seymore4Head at hotmail.invalid>
>wrote:
>
>> On Fri, 05 Sep 2014 12:48:56 -0400, Seymore4Head
>> <Seymore4Head at Hotmail.invalid> wrote:
>>
>> >I'm still doing practice problems.  I haven't heard from the library
>> >on any of the books I have requested.
>> >
>> >
>> http://www.practicepython.org/exercise/2014/04/16/11-check-primality-functions.html
>> >
>> >This is not a hard problem, but it got me to thinking a little.  A
>> >prime number will divide by one and itself.  When setting up this
>> >loop, if I start at 2 instead of 1, that automatically excludes one of
>> >the factors.  Then, by default, Python goes "to" the chosen count and
>> >not "through" the count, so just the syntax causes Python to rule out
>> >the other factor (the number itself).
>> >
>> >So this works:
>> >while True:
>> >    a=random.randrange(1,8)
>> >    print (a)
>> >    for x in range(2,a):
>> >        if a%x==0:
>> >            print ("Number is not prime")
>> >            break
>> >    wait = input (" "*40  + "Wait")
>> >
>> >But, what this instructions want printed is "This is a prime number"
>> >So how to I use this code logic NOT print (not prime) and have the
>> >logic print "This number is prime"
>>
>> I am sure this has already been done, but after it was pointed out
>> that you don't need to test for any number that multiplies by 2 it
>> made me think again.
>>
>> If you start with the list [3,5,7] and step through the list of all
>> remaining odd numbers (step 2), and start appending numbers that won't
>> divide by numbers already appended in the list, that would seem like a
>> pretty efficient way to find all prime numbers.
>>
>
>To be correct, you only need to check for n being divisible by primes less
>than sqrt(n). For example, the following code will produce a list of primes
>from 2 to 1000 (the result will be in the "primes" list):
>
>import math
>primes = [2]
>for i in range(3, 1000):
>    end = math.sqrt(i)
>    for x in primes:
>        if x > end: # Once x is larger than the sqrt(i), we know it must be
>prime, so we can early exit.
>            #print(i, "is a prime number")
>            primes.append(i)
>            break
>        if (i % x) == 0:
>            #print(i, "is a composite number")
>            break

Thanks



More information about the Python-list mailing list