质因数分解算法

每个 合数 都可以写成几个 质数 相乘的形式,这几个质数就都叫做这个合数的质 因数 。 如果一个质数是某个数的因数,那么就说这个质数是这个数的质因数。而这个因数一定是一个质数。

质因数 (或 质因子 )在数论里是指能整除给定正整数的质数。 两个没有共同质因子的正整数称为 互质 。因 为1没有质因子, 1 与任何正整数(包括1本身)都是互质 。 正整数的 因数分解 可将正整数表示为一连串的质因子相乘,质因子如重复可以 指数 表示。根据 算术基本定理 , 任何正整数皆有独一无二的质因子分解式。 只有一个质因子的正整数为质数。就是一个数的约数,并且是质数,比如8=2×2×2,2就是8的质因数。12=2×2×3,2和3就是12的质因数。把一个式子以12=2×2×3的形式表示,叫做分解质因数。16=2×2×2×2,2就是16的质因数, 把一个 合数 写成几个质数相乘的形式表示,这也是 分解 质因数 。分解质因数的方法是先用一个合数的最小质因数去除这个合数,得出的数若是个质数,就写成这个合数相乘形式;若是一个合数就继续按原来的方法,直至最后是一个质数 。分解质因数的有两种表示方法,除了大家最常用知道的“短除分解法”之外,还有一种方法就是“塔形分解法”。分解质因数对解决一些自然数和乘积的问题有很大的帮助,同时又为求最大公约数和最小公倍数做了重要的铺垫。

计算方法
短除法
求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。分解质因数的算式的叫 短除法 ,和除法的性质差不多,还可以用来求多个个数的 公因式 :求最大公因数的一种方法,也可用来求最小公倍数。求几个数最大 公因数 的方法,开始时用观察比较的方法,即:先把每个数的因数找出来,然后再找出公因数,最后在公因数中找出最大公因数。12与18都可以分成几种形式不同的乘积,但分成质因数连乘积就只有以上一种,而且不能再分解了。所分出的质因数无疑都能整除原数,因此这些质因数也都是原数的约数。从分解的结果看,12与18都有公约数2和3,而它们的乘积2×3=6,就是 12与18的最大公约数。采用分解质因数的方法,也是采用短除的形式,只不过是分别短除,然后再找公约数和最大公约数。如果把这两个数合在一起短除,则更容易找出公约数和最大公约数。从短除中不难看出,12与18都有公约数2和3,它们的乘积2×3=6就是12与18的最大公约数。与前边分别分解质因数相比较,可以发现:不仅结果相同,而且短除法竖式左边就是这两个数的公共质因数,而两个数的最大公约数,就是这两个数的公共质因数的连乘积。实际应用中,是把需要计算的两个或多个数放置在一起,进行短除。在计算多个数的最小公倍数时,对其中任意两个数存在的约数都要算出,其它无此约数的数则原样落下。最后把所有约数和最终剩下无法约分的数连乘即得到最小公倍数。

John M. Pollard提出了第二种因数分解的方法,Pollard Rho快速因数分解。该算法时间复杂度为O(n^(1/4))。
分解质因数代码:
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:  
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n, 
重复执行第一步。 
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。


http://www.tuicool.com/articles/Frm6fy

你可能感兴趣的:(算法)