求 10w 之内的所有素数(此题主要是考虑效率问题)

 1 '''
 2 求 10w 之内的所有素数
 3 
 4 此题主要是考虑效率问题
 5 '''
 6 # 这是初始版本,效率非常的低
 7 n = 100000
 8 for i in range(2,n):
 9     for j in range(2,i):
10         if i % j == 0:
11             break
12     else:
13         print(i)
14         
15 # 第二版
16 """
17     分析
18         1、除了2 的偶数都不是素数 所以,for i in range(3,n,2):
19         2、大于10的质数(素数) ,个位都是1,7,3,9,个位是5的,都能被5整除
20         3、for j in range(2,i):这里的i ,通过测算,可以是 i**0.5 ,之后的都是重复的,此外,range必须是int所以需要强制转换,
        其次,如果正好中点,那这个值会被舍去,所以需要+1
21 4、for j in range(2,i),因为是奇数,所以偶数不会被整除,所以 for j in range(3,int(i)**0.5+1,2) 22 5 23 """ 24 a = [] 25 n = 100000 26 print(2) # 把2 单独提出来,因为:2 不进循环,直接break 27 for i in range(3,n,2): 28 if i > 10 and i % 10 == 5: 29 continue 32 for j in range(3,int(i**0.5)+1,2): 33 if i % j == 0: 34 break 35 else: 36 a.append(i) 37 print(a) 38 39 40 41 ''' 42 计算运行时间,使用了datetime库,time模块,主要用于多线程 43 ''' 44 import datetime 45 46 start = datetime.datetime.now() 47 a = [] 48 n = 100000 49 for i in range(3,n,2): 50 if i > 10 and i % 10 == 5: 51 continue 52 if i > 10 and i % 10 != 1 and i % 10 != 3 and i % 10 != 7 and i % 10 != 9: 53 continue 54 for j in range(3,int(i**0.5)+1,2): 55 if i % j == 0: 56 break 57 else: 58 a.append(i) 59 t_time = (datetime.datetime.now()-start).total_seconds() 60 print(t_time) 61 62 # 0.189804