求小于 n 的素数的个数
厄拉多塞筛法,这种算法好像在信息安全数学基础中讲到过,果然学过的知识还是有用啊。
思路:标记当前数的倍数,直到 √n (根号下 n)
# _*_ cpding:utf-8 _*_
def countPrimes(n):
if n < 2:
return 0
isPrime = [True]*n
isPrime[0] = isPrime[1] = False
x = 2
while x*x < n:
if isPrime[x]:
p = x*x
while p < n:
isPrime[p] = False
p +=x
x += 1
return sum(isPrime)
# 利用 Python 的特性 切片
def countPrimes1(n):
if n < 3:
return 0
primes = [True] * n
primes[0] = primes[1] = False
for i in range(2, int(n ** 0.5) + 1):
if primes[i]:
primes[i * i: n: i] = [False] * len(primes[i * i: n: i])
return sum(primes)
def main():
a = 100
print countPrimes1(a)
if __name__ == '__main__':
main()
第二种方法用到了 Python 的高级特性切片
切片
网友评论