|  | 
 
 发表于 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]
应该没犯规吧?
   筛选生成、筛选结果
 | 
 评分
查看全部评分
 |