在数学的领域中,整数因式分解是一个较为简单却又劳动密集的议题。试除法(Trial Division)正是用来将整数分解成质数的基本方法之一,这种算法透过检查一个整数是否可以被小于等于其平方根的数字整除,达到了解数的目的。虽然这样的步骤听起来繁琐,但却是理解数学概念的最佳途径之一。
试除法的基本思想是系统性地测试一个整数 n,即待因式分解的整数,是否可以被每一个小于 n 的数字整除。
以n = 70 为例,我们可以尝试逐个质数来分解:首先,70 除以2 得到35;接着,35 除以2 和3 都不整除;最后,35 除以5 则得到7,而7 本身也是质数。因此,70 的因数可以表示为 2 × 5 × 7。
试除法的历史悠久,最早由意大利数学家斐波那契于其著作《算术之书》(Liber Abaci,1202年)中描述。此后,试除法成为了理解数学以及因式分解的重要工具。
试除法的运作基于以下几个步骤:首先,我们只需从 2 开始检测,因为任何整数 n 的因数更有可能是 2 而不是 3,依此类推。这种判断能够有效降低运算量。对于已经证实不为某个数字的因数的情况,例如当一个数字已被发现不是 2 的倍数时,就无需再测试其倍数。
因此,试除法的测试范围仅需界定在 n 的平方根以下。假设 n 可以被某个数 p 整除,那么一定存在另一个数 q,使得 n = p × q,若 q 小于 p,那么一定会更早被检测到。
这就意味着,只需测试质数的候选因数,直到小于 n 的平方根为止。举例来看,对于 n = 49 来说,我们只需测试到 7(即 √49)。若 √n 为整数,那么该整数便是 n 的因数,且 n 为完全平方数。
在最坏的情况下,试除法算法的效率会较低。针对一个以二进制表示的n 位数字数字a,起始于两并一直测试至a 的平方根,这样的算法需要进行的试除次数为约2^(n/2) / (n/2) ln 2 ,当然这仅仅是理论上的计算,实际的效率可能会受到多项因素的影响。
可以证明,大约 88% 的正整数会有一个在 100 之下的因数,并且 92% 会在 1000 之下。
虽然试除法在大多数情况下仍然是一个满意的方法,但如果碰到不含小质数的长数字,可能需要耗费数天或数月的时间来完成因式分解。在这种情况下,其他方法如二次筛法和一般数域筛法(GNFS)便会被采用,这些方法亦面临超多项式的时间增长问题,因此在实务上,我们对于可处理的数字位数有实际的限制。
特别是在公共密钥加密的领域,选择具有相似大小的大质数因数的值,以确保无法被任何公开可知的方法分解,而这一点当然更加突显了试除法的局限性。
最大的公钥密码数字是 RSA-250,这是一个 250 位的数字,透过 GNFS 和多部超级电脑的资源,耗时达 2700 核心年,才得以完成分解。
随着数字科技的不断推进,试除法仍然是一种简单有效的整数因式分解方法,其中包含许多值得思考的数学原理。面对未来的数学挑战,您认为有哪些方法能够更进一步提升我们在因式分解上的效率与准确性呢?