|
发表于 2023-7-3 12:56:19
|
显示全部楼层
本帖最后由 smallwh 于 2023-7-3 13:07 编辑
不对。在 getprimeyinshus 中,i 取值范围还是0,n**0.5(向上取整),会导致分解的因数不全。
14=1*2*7,7是14的最大质因数。但在你的程序中,getprimeyinshus返回值是 [1,2]。很明显,7被遗漏了。
若要避免遗漏,i 应满足1<i<=n(若n为质数,则n为n的最大质因数,所以要取n),但会导致程序运行时间长
可以使用分解质因数来代替寻找所有因数再判断是否为质数,代码如下
- def fenjiezhiyinshu(n):
- if n <= 3:
- return n
- elif n % 2 == 0:
- return fenjiezhiyinshu(n//2)
- else:
- for i in range(3,n,2):
- if n % i == 0:
- return fenjiezhiyinshu(n//i)
- elif i >= int(n**0.5) + 1:
- return n
复制代码
求72的质因数,我们通常可以这么做:
72÷2=36,36÷2=18,18÷2=9,9÷3=3
因此,72的最大质因数是3。这一段代码的原理与其类似,通过不断除以因数来求最大的质因数 |
|