zoukankan      html  css  js  c++  java
  • 求 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
    为什么要坚持,想一想当初!
  • 相关阅读:
    golang-uuid
    golang-random随机数
    git status检测不到文件变化
    vimium
    go1.11新特性,mark一下
    HTML网页滚动加载--mark一下
    docker-清理none镜像等操作
    golang websocket
    postman 快捷方式--启动图标
    tmux基本操作
  • 原文地址:https://www.cnblogs.com/JerryZao/p/9417309.html
Copyright © 2011-2022 走看看