![每个人的Python:数学、算法和游戏编程训练营](https://wfqqreader-1252317822.image.myqcloud.com/cover/137/44510137/b_44510137.jpg)
上QQ阅读APP看书,第一时间看更新
3.6.1 编程实现——如何判断丑数
解决这道题有两种方法,一种思路是暴力验证,我们将小于所输入的数的所有质数寻找出来,然后依次验证是否可以整除。这种思路理论上可行,但在实际解题过程中并不适用,我们知道质数的判定是非常耗时的,当输入的数很大时,这种方式基本就失效了。另一种思路是根据丑数的性质来入手,因为丑数只能有2、3和5这3种质因数,因此可以将输入的数循环对这3个数进行整除操作,直到最终无法整除2、3和5,这时,如果余数不是1,则表明其还有其他的质因数。编写代码如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T64_29610.jpg?sign=1739039743-BNFW1owVp604M5GtzATCuY7Z8cH7gxTA-0-fd2a5ffea45646690d0a2b40b7eeb12a)
上面的代码的思路没什么问题,运行起来也能很好地工作,只是看上去代码还是有一些冗余,我们可以想办法对其进行一些简化。在代码中尝试对2、3和5进行整除的逻辑占了非常大的篇幅,可以使用元组对其进行聚合,优化代码如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T64_29608.jpg?sign=1739039743-euh9DHCYR41u33dJTK1FJtk0TsWUHX9R-0-9e545f33169b6b41d370ec6624656a61)
优化后的代码清爽了很多,逻辑也更加清晰。