+ 1

Hi there! How can I numerate strings in result? How to print quantity of prime numbers?

I have a python code: for n in range (2, (int(input("y= ")))): for x in range (2,n): if n%x == 0: break else: c=0 print (n, 'is a prime number')

12th Dec 2019, 11:34 AM
Andrey Shintar
Andrey Shintar - avatar
4 Answers
+ 2
def is_prime(n): for i in range(2, n): if n % i == 0: return False return True primes = [x for x in range(int(input("Number? "))+1) if is_prime(x)] print(primes) --------------------- This will create a list containing all prime numbers from 0 to whatever number you input. you can then use any kind of list operation on it, such as: print(sum(primes)) print(len(primes)) or iterate through it like so: for prime in primes: print(prime); of course you can also use list slicing etc. if you'd like to do numerical operations on these values, I highly recommend using numpy arrays instead of a list: import numpy as np primes = np.asarray(primes)
17th Dec 2019, 5:10 AM
grdr
+ 1
Your code produces a list of all uneven numbers within range, rather than all primes within range. That's because you're merely checking if modulo 2 is 0, a.k.a. the definition of "even number", and return false if that's the case, while returning true if it's not. Also, note that your code could be refactored to this: unevens = [x for x in range(int(input ("Number?"))+1) if x%2!=0] print(unevens) The for-loop you omitted compared to my example on the other hand checks if modulo equals 0 for any i (where 2 < i < n) and returns true only if that doesn't turn out to be true. This fits the definition of a prime number: modulo must not equal 0 for any positive integer other than 1 and n. Therefore, we check all integers i where 2 < i < n. Edits for clarification: 5 divided by 2 equals 2.5: 5 / 2 = 2.5 Now, imagine floats are not allowed, thus: 5 // 2 = 4 with a remainder of 1, thus: 5 % 2 = 1 On the other hand: 4 // 2 = 2 with a remaind of 0, thus: 4 % 2 = 0 By extension, we can use (x % 2 == 0) to evaluate if x is even, and (x % 2 != 0) to evaluate if x is not even, seeing as all even numbers must be dividable by 2 with a remainder of 0.
17th Dec 2019, 11:23 PM
grdr
0
Thanks! It works. But why do we need to use the second string(for i in range(2,n))? we can do like this: def is_prime(n): if n%2 == 0: return False return True primes = [x for x in range (int(input ("Number?"))+1) if is_prime(x)] print(primes)
17th Dec 2019, 8:39 PM
Andrey Shintar
Andrey Shintar - avatar
0
also, I just realized it's much better to use: for i in range(2, round(n/2)+1): ... n/2 is just fine as a limit because n % i cannot be 0 for any i > n/2 (except i = n obviously). the +1 is only needed to make sure 4 isn't added to the list by mistake and doesn't interfere with anything else. all things considered, this works the same but halves execution time :)
19th Dec 2019, 2:28 PM
grdr