c++分解质因数详解

分解质因数

1. 定义

把一个合数分解成若干个质因数的乘积的形式,即求质因数的过程叫做分解质因数。如60=2×2×3×5

质因数也称为质因子或素因数。

性质1:质数分解的结果是唯一的。

2. 短除法

从最小的质数除起,一直除到结果为质数为止。分解质因数的算式叫短除法,和除法的性质相似。例如:

c++分解质因数详解_第1张图片

得到 360=2×2×2×3×3×5。

参考程序1:

c++分解质因数详解_第2张图片

输入100,输出2 2 5 5。

请思考:程序的第20句中为什么如果i是因子就一定是质因子。

短除法:

如果追求程序的简洁性,可以省略prime函数。

参考程序2

c++分解质因数详解_第3张图片

思考题:“参考程序2”的正确性。

**进一步思考:参考程序1和参考程序2的时间复杂度是多少?

筛选法:

前面的求质数筛选法中,可以求出2到N的每个数i的最小质因数P[i]。利用这个预处理,可以得到一种迭代的分解质因数方法:

问题:对A进行分解质因数。

已知A的最小质因数是P[A],令A’=A/P[A];

原问题可以转换为子问题:对A’进行分解质因数。

迭代处理,直到A’没有最小质因数。

参考程序3:(填空)

//筛选法分解质因数

#include

using namespace std;

int N,A,P[1000001];

int main(){

cin >>N;

P[1]=1;

for (int i=2; i*i<=N; i++)

if (P[i]==0){ //质数

for (int j=i+i; j<=N; j+=i)//i是质数时,删除i的倍数

if (P[j]==0) P[j]=i;

}

for (A=N; P[A]>0; A=A/P[A] ) //A迭代变小

cout <

cout << A;

return 0;

}

对于求2到N的所有数分解质因数时,效率很高。

你可能感兴趣的:(基础精讲,c++,开发语言,算法)