|
发表于 2019-12-23 22:11:33
|
显示全部楼层
本帖最后由 Stubborn 于 2019-12-24 04:58 编辑
- def fun293(n):
- if n == 1: return 0
- primes = [True] * n
- primes[0], primes[1] = False, False
- for (i, prime) in enumerate(primes):
- if prime:
- for j in range(i * i, n, i): primes[j] = False
- return len([k for (k, trueprime) in enumerate(primes) if trueprime])
- import time
- for n in range(10):
- num = 10**n
- a = time.perf_counter()
- get = fun293(num)
- b = time.perf_counter()
- print(get,'用时',b-a,'s',n)
复制代码
上了10**9就搞不定了,
- 0 用时 1.0259999999595593e-06 s 0
- 4 用时 1.2316000000012206e-05 s 1
- 25 用时 3.746000000004468e-05 s 2
- 168 用时 0.0003412480000000162 s 3
- 1229 用时 0.00341709699999998 s 4
- 9592 用时 0.037514688999999934 s 5
- 78498 用时 0.376490329 s 6
- 664579 用时 4.567675358 s 7
- 5761455 用时 48.727864815 s 8
复制代码
想想还可以提速一半, 提速成功
- def test(n: int):
- if n < 3: return 0
- count = 0
- primes = [True] * (n//2)
- for i in range(3, n, 2):
- if primes[i//2]:
- count += 1
- for j in range((i * i)//2, n//2, i): primes[j] = False
- return count + 1
复制代码
- 0 用时 7.700000000006313e-07 s 0
- 4 用时 5.7779999999979514e-06 s 1
- 25 用时 1.2270999999997728e-05 s 2
- 168 用时 0.00027523900000000004 s 3
- 1229 用时 0.001398563999999998 s 4
- 9592 用时 0.011049376999999999 s 5
- 78498 用时 0.10091913899999999 s 6
- 664579 用时 1.1721501019999998 s 7
- 5761455 用时 12.463232227 s 8
复制代码 |
评分
-
查看全部评分
|