求 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
为什么要坚持,想一想当初!