分解大整数的因数无法运行
以下是我的代码:while True:
a = input('请输入准备分解因数的正整数:')
b = float(a)
c = int(b)
if b - c != 0 or b <= 0:
print('False')
else:
d = 2
while d <= b:
if b % d == 0:
print(d)
b = b / d
d = 2
else:
d +=1
print('分解因数完成')
以下是在IDLE运行的一部分:
请输入准备分解因数的正整数:17
17
分解因数完成
请输入准备分解因数的正整数:159
3
53
分解因数完成
请输入准备分解因数的正整数:62155215
3
3
3
5
460409
分解因数完成
请输入准备分解因数的正整数:65233568692
2
2
28591
570403
分解因数完成
请输入准备分解因数的正整数:154625847568
2
2
2
2
52609
183697
分解因数完成
请输入准备分解因数的正整数:1546845987232
2
2
2
2
2
7
13
53
10022587
分解因数完成
请输入准备分解因数的正整数:99965484785432
2
2
2
7
479
来到这里就卡了{:10_266:}
初学者菜鸟一枚,求教大佬怎么解决,谢谢 本帖最后由 Twilight6 于 2020-7-7 22:56 编辑
你需要判断最后的数是不是素数,否则效率太低了,到 479 的时候其实那个数已经是质数了
而你的循环要 +1 慢慢加到 3726718043 才会停止循环,此时直接判断是否为素数就行了:
while True:
a = input('请输入准备分解因数的正整数:')
b = float(a)
c = int(b)
if b - c != 0 or b <= 0:
print('False')
else:
d = 2
while d <= b:
if b % d == 0:
print(d)
b = b / d
d = 2
else:
d +=1
for i in range(2,int(b**0.5)+1):
if not (b % i):
break
else:
print(b)
break
print('分解因数完成')
运行结果:
请输入准备分解因数的正整数:99965484785432
2
2
2
7
479
3726718043.0
分解因数完成
谢谢2楼大佬,另外想用for循环把列表所有的字符串剔除,为什么好像达不到目的?
>>> a =
>>> for i in a:
if type(i) == str:
a.remove(i)
>>> a
页:
[1]