wshchz 发表于 2020-7-7 22:34:06

分解大整数的因数无法运行

以下是我的代码:
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:52:51

本帖最后由 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
分解因数完成

wshchz 发表于 2020-7-12 12:43:02

谢谢2楼大佬,另外想用for循环把列表所有的字符串剔除,为什么好像达不到目的?
>>> a =
>>> for i in a:
        if type(i) == str:
                a.remove(i)
>>> a
页: [1]
查看完整版本: 分解大整数的因数无法运行