每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。 分解质因数只针对合数。今天算法是关于质因数分解的,其中我们不仅要有一个函数用于判断质数,还要把一个比较大的数字分解出他的质因数,并得到那个最大的质因数。
A003. Largest prime factor
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
合数13195的质因数是5,7,13和29。那么,数字600851475143 的那个最大的质因数是什么呢?
分析:
判断一个数字是否是质数并不难,我们可以得到一个不大于600851475143一半的质数列表,不过首先也要判断600851475143是否是一个质数。假设这个数字能被一个质数n整除,那我们就可以逐步缩小质数的搜索范围,这样就可以节省一部分时间,而不是一直一点一点验证到底。
代码:
最后的结果是 [71, 839, 1471, 6857],最大值是6857
在做这个算法的过程中有很多地方值得思考,如何最大限度的缩小寻找质因数的范围,如果这个数字本身是质数怎么办,如果这个数字的是2048,那么这个算法还有效吗?除了计算600851475143之外,还可以计算一下和它相邻的几个数字,很快你就会发现自己算法的问题。当然,我的算法仍然不是最高效的。
下期预告:Largest palindrome product