Count the number of prime numbers less than a non-negative number, *n*.
Example:
1 2 3
Input: 10 Output: 4 Explanation: There are 4 prime numbers less than 10, they are 2, 3, 5, 7.
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
classSolution: defcountPrimes(self, n: int) -> int: isPrime = [True] * n for i in range(2, n): if i **2 >= n: break ifnot isPrime[i]: continue for j in range(i * i, n, i): isPrime[j] = False count = 0 for i in range(2, n): if isPrime[i]: count += 1 return count
素数
验证
最通俗易懂的算法
1 2 3 4 5 6 7 8
import math num = 997 for i in range(2, int(math.sqrt(num)) + 1): if num % i == 0: print(num, '/', i, '=', num / i, 'is not a prime') break else: print(num, 'is a prime.')
那求一下前50个素数就可以这样写,
1 2 3 4 5 6 7 8 9 10
count = 0 num = 2 while count < 50: for i in range(2, int(math.sqrt(num)) + 1): if num % i == 0: break else: print(num) count += 1 num += 1
def main(): for n in primes(): if n < 1000: print(n) else: break
def _odd_iter(): n = 1 while True: n = n + 2 yield n
def _not_divisible(n): return lambda x: x % n > 0
def primes(): yield 2 it = _odd_iter() while True: n = next(it) yield n it = filter(_not_divisible(n), it)
if __name__ == '__main__': main()
1 2 3 4 5 6 7
def is_prime(n): """判断素数的函数""" assert n > 0 for factor in range(2, int(sqrt(n)) + 1): if n % factor == 0: return False return True if n != 1 else False
# -*- coding: utf-8 -*- import math primelist = []
defprime(n): if n == 2: return primelist.append(2) for num in range(2, n + 1): prime = 1 for k in range(2, int(math.sqrt(num)) + 1): if num % k == 0: prime = 0 break if prime == 1: primelist.append(num)
defbi_search(prime, primelist, start, end): if prime < 2: return-1 if start > end: return-1 mid = (start+end)/2 if primelist[mid] == prime: return mid elif primelist[mid] > prime: end = mid-1 else: start = mid+1 return bi_search(prime, primelist, start, end)
number = input() prime(number) # print primelist whileTrue: try: num = int(raw_input()) except: break print bi_search(num, primelist, start=0, end=len(primelist)-1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
# 输出指定范围内的素数 # take input from the user lower = int(input("输入区间最小值: ")) upper = int(input("输入区间最大值: ")) for num in range(lower,upper + 1): # 素数大于 1 if num > 1: for i in range(2,num): if (num % i) == 0: break else: print(num)
1 2 3 4 5 6 7 8 9
from math import sqrt for n in range(2, 1000): for x in range(2, int(sqrt(n)+1)): if n % x == 0: print(n, '=', x, '*', n//x) break else: print(n, 'is a prime.')