首页 > 解决方案 > 为什么在处理数字时该功能无法正常工作?

问题描述

所以我试图得到一个给定的数字。问题是,代码会打印错误消息,而且它也不适用于所有数字。这是为什么?

这是获取因子的部分:

thefactors = []
            d = 2
            while d*d <= number:
                while (number % d) == 0:
                    factors.append(d) 
                    number //= d
                d += 1
                break

            if number > 1:
                factors.append(number)
                print('The factors of {} are:'.format(number), thefactors)

发生了什么事,我该如何解决?

标签: python

解决方案


我看到的问题是,您既要检查 的平方d是否小于nd*d <= nd**2 <= n),又要n在发现因子时重新分配(n //= d)。这不包括不必要的break陈述。

这是我所做的:

>>> def factorization(n):
        factors = []
        d = 2
        while d <= n:
            if n % d == 0:
                factors.append(d)
                n //= d
                d = 2
            else:
                d += 1
        return factors

>>> factorization(104)
[2, 2, 2, 13]
>>> factorization(9)
[3, 3]
>>> 

此方法隐式检查d**2小于或等于n,因为要满足while条件,n // d必须小于或等于d,因此d**2必须小于或等于n

要打印素数分解:

>>> num = 104
>>> factors = factorization(num)
>>> print(f"The prime factors of {num} are {factors}")
The prime factors of 104 are [2, 2, 2, 13]
>>> print(f"The prime factors of {num} are {', '.join(factors)}")
The prime factors of 104 are 2, 2, 2, 13

推荐阅读