![每个人的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=1738893544-jKVtkCTT6s46HQcCFEyczm9CxByu9pkT-0-bc33adebabce87ecbbbb727990c1e0b8)
上面的代码的思路没什么问题,运行起来也能很好地工作,只是看上去代码还是有一些冗余,我们可以想办法对其进行一些简化。在代码中尝试对2、3和5进行整除的逻辑占了非常大的篇幅,可以使用元组对其进行聚合,优化代码如下:
![](https://epubservercos.yuewen.com/33C5B1/23721678209556606/epubprivate/OEBPS/Images/Figure-T64_29608.jpg?sign=1738893544-3vHFq5GpheohwW29j9WpJneuO8BJBExL-0-e95aa9bca3da25d38b34b1c98d34041c)
优化后的代码清爽了很多,逻辑也更加清晰。