c++分解质因数详解

分解质因数

1. 定义

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

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

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

2. 短除法

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

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

参考程序1:

输入100,输出2 2 5 5。

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

短除法:

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

参考程序2

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

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

筛选法:

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

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

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

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

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

参考程序3:(填空)

//筛选法分解质因数

#include <bits/stdc++.h>

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 <<P[A]<<" ";

cout << A;

return 0;

}

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪子小院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值