|
发表于 2018-9-3 18:10:21
|
显示全部楼层
尝试了 5 个版本,没问题
200 测不出时间
- import time
- n = 2000
- ## code 1
- start_time = time.time()
- prime = []
- check = []
- k = int(n**0.5)
- for i in range(3,n+1,2):
- if i not in check:
- prime.append(i)
- check.append(i)
- if i <= k:
- while check[-1] < n:
- check.append(check[-1]+i+i)
- if n > 1:
- prime.insert(0,2)
- elapsed_time1 = ( time.time() - start_time )*1000
- ## code 2
- start_time = time.time()
- prime2 = [i for i in range(3, n+1, 2)]
- if n > 1:
- prime2.insert(0,2)
- k = int(n**0.5)
- for i in range(3,k+1,2):
- j = i
- while j < n - i:
- j += i+i
- try:
- prime2.remove(j)
- except:
- pass
-
- elapsed_time2 = ( time.time() - start_time )*1000
- ## code 3
- start_time = time.time()
- prime3 = []
- check2 = []
- k = int(n**0.5)
- for i in range(3,n+1,2):
- if i not in check2:
- prime3.append(i)
- if i <= k:
- for j in range(i, n, i+i):
- if j not in check2:
- check2.append(j)
- if n > 1:
- prime3.insert(0,2)
- elapsed_time3 = ( time.time() - start_time )*1000
- ## code 4
- start_time = time.time()
- prime4 = [i for i in range(11, n+1, 2) if i%3!=0 and i%5!=0 and i%7!=0]
- if n > 6:
- prime4.insert(0,7)
- if n > 4:
- prime4.insert(0,5)
- if n > 2:
- prime4.insert(0,3)
- if n > 1:
- prime4.insert(0,2)
- for i in range(11,int(n**0.5)+1,2):
- j = i
- while j < n - i:
- j += i+i
- if j in prime4:
- prime4.remove(j)
- elapsed_time4 = ( time.time() - start_time )*1000
- ## code 5
- start_time = time.time()
- prime5 = [i for i in range(11, n+1, 2) if i%3!=0 and i%5!=0 and i%7!=0]
- if n > 6:
- prime5.insert(0,7)
- if n > 4:
- prime5.insert(0,5)
- if n > 2:
- prime5.insert(0,3)
- if n > 1:
- prime5.insert(0,2)
- for i in range(11,int(n**0.5)+1,2):
- j = i*i
- while j < n:
- if j in prime5:
- prime5.remove(j)
- j += i+i
- elapsed_time5 = ( time.time() - start_time )*1000
- print('len1',len(prime),len(check))
- print('elapsed time = {} ms'.format(elapsed_time1))
- print('len2',len(prime2))
- print('elapsed time = {} ms'.format(elapsed_time2))
- print('len3',len(prime3),len(check2))
- print('elapsed time = {} ms'.format(elapsed_time3))
- print('len4',len(prime4))
- print('elapsed time = {} ms'.format(elapsed_time4))
- print('len5',len(prime5))
- print('elapsed time = {} ms'.format(elapsed_time5))
复制代码
n = 2000
- len1 303 1441
- elapsed time = 22.9947566986084 ms
- len2 303
- elapsed time = 17.994403839111328 ms
- len3 303 710
- elapsed time = 40.98987579345703 ms
- len4 303
- elapsed time = 7.997751235961914 ms
- len5 303
- elapsed time = 4.9991607666015625 ms
复制代码
n = 200
- len1 46 129
- elapsed time = 1.0006427764892578 ms
- len2 46
- elapsed time = 0.0 ms
- len3 46 59
- elapsed time = 0.0 ms
- len4 46
- elapsed time = 0.0 ms
- len5 46
- elapsed time = 0.0 ms
复制代码- >>> prime5
- [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199]
复制代码
应该没犯规吧? 
筛选生成、筛选结果 |
评分
-
查看全部评分
|