找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2073|回复: 3

[求助] 最近想重构一个函数,遇到个奇怪的问题,程序无故变慢

0

主题

0

帖子

0

积分

贫民

积分
0
homepeople 发表于 2020-1-16 01:45:33 | 显示全部楼层 |阅读模式
本帖最后由 homepeople 于 2020-1-16 01:50 编辑

最近想重构一个质数函数,遇到个奇怪的问题,在 is_Prime里面如果我把

if i > Number//3:

      return True

换成函数speedUp_Prime速度就会慢很多,根本没做什么修改,请问有没有人遇到类似情况?到底是什么问题?

  1. def is_Prime(Number):#Number is a Prime or not,return boolean
  2.       if Number==2 or Number ==5:# 2 and 5 are Prime
  3.               return True
  4.       if is_even(Number) or Number%10 ==5 :#Prime Not Even and last Number Not 5
  5.               return False
  6.    
  7.       i=0
  8.       for i in range(3,Number,2):#already remove even,so start at 3 step 2
  9.               if(Number%i == 0):
  10.                       return False
  11.               #        if speedUp_Prime(i,Number):
  12.               #              return True
  13.               if i > Number//3:
  14.                       return True   
  15.        else:#After calculate all Number
  16.               return True
  17.    
  18. def speedUp_Prime(i,Number):
  19.         if i > Number//3:
  20.                 return True
复制代码
  1. def get_Prime_Fast(MinNum,MaxNum):#get all Prime in Range(MinNum,MaxNum),print out
  2.     n=1   
  3.     for i in range(MinNum,MaxNum):
  4.         if is_Prime(i):
  5.             print(n,i)
  6.             n += 1
复制代码
  1. if __name__=='__main__':
  2.     import time
  3.     start = time.time()
  4.     get_Prime_Fast(2,100000)
  5.     end = time.time()
  6.     print (end-start)
复制代码





回复

使用道具 举报

1

主题

17

帖子

17

积分

贫民

积分
17
1276571113 发表于 2020-1-19 11:41:54 | 显示全部楼层
请问楼主,你这里为什么需要在程序里加一个判断?额外的增加程序的负担呢?
是否可以用:
temp = Number//3
for i in range(3,temp,2):#already remove even,so start at 3 step 2

这样来解决呢?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

2

积分

贫民

积分
2
明亮 发表于 2020-1-19 12:24:57 | 显示全部楼层
函数调用需要成本
回复 支持 反对

使用道具 举报

1

主题

17

帖子

17

积分

贫民

积分
17
1276571113 发表于 2020-1-19 13:04:22 | 显示全部楼层
temp = int(Number//3)+1
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表