Python编写函数,对整数进行因数分解

西瓜土豆泥巴 2018-11-06 03:20:34
这是代码,想请问是哪里有问题,为什么运行不了,一运行就会死机。
from random import randint
from math import sqrt
def factoring(n) :
#对大数进行因数分解
if not isinstance(n,int) :
print('You must give me an integer')
return
#开始分解,把所有因数都添加到result列表中
result = []
for p in primes :
while n != 1 :
if n % p == 0 :
n = n / p
result.append(p)
else :
break
else :
result = map(str,result)
result = '*'.join(result)
return result
#考虑参数本身就是素数的情况
if not result :
return n
testData = [randint(10,100000) for i in range(50)]
#随机数中的最大数
maxData = max(testData)
#小于maxData的所有素数
primes = [p for p in range(1,maxData) if 0 not in [p % d for d in range(2,int(sqrt(p))+1)]]
for data in testData :
r = factoring(data)
print(data,'=',r)
#测试分解结果是否正确
print(data == eval(r))
...全文
1044 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
YXTS122 2019-02-11
  • 打赏
  • 举报
回复
西瓜土豆泥巴 2018-11-08
  • 打赏
  • 举报
回复
引用 2 楼 u014098735 的回复:
primes = [p for p in range(1,maxData) if 0 not in [p % d for d in range(2,int(sqrt(p))+1)]] 这个列表第一个数是1,造成了11行 while n!=1:这句话死循环,解决方法:把这个列表推导式修改下去掉开头那个1,或者把循环改成 for p in prime[1:] 切掉第一个数。
不客气,给积分吧,哈哈

okkk 找到了
码仔1号 2018-11-06
  • 打赏
  • 举报
回复
primes = [p for p in range(1,maxData) if 0 not in [p % d for d in range(2,int(sqrt(p))+1)]] 这个列表第一个数是1,造成了11行 while n!=1:这句话死循环,解决方法:把这个列表推导式修改下去掉开头那个1,或者把循环改成 for p in prime[1:] 切掉第一个数。
不客气,给积分吧,哈哈
码仔1号 2018-11-06
  • 打赏
  • 举报
回复
看到第10行就看不下去了, primes是什么鬼

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧