分解质因数(质数分解)

本文介绍了分解质因数的概念,提供了解决思路,并分别展示了C++和Python两种语言实现质因数分解的方法。通过筛出素数,利用质因子在平方根附近的特性,枚举并更新质因子个数,最终得到质因数分解的结果。
摘要由CSDN通过智能技术生成

什么是分解质因数

质因子分解:将一个正整数n写成一个或多个质数的乘积的形式。

思路

求出区间[a,b]中所有整数的质因数分解。
每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)

样例输入
3 10
样例输出
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5

先筛出所有素数,构建素数表,然后再分解。

素数的判断:如果在2~n-1之间存在n的约数,设为k,即n%k = 0,那么k*(n/k) = n,即n/k也为n的一个约数,且k与n/k中一定满足其中一个≤sqrt(n),另一个≥sqrt(n)【sqrt(n)为根号n】。所以只要判定n能否被2,3,…,|sqrt(n)|中的一个数整除,即可判定n是否为素数

对于一个正整数n来说,如果他存在1和本身之外的因子,那么一定是在sqrt(n)左右成对出现。因此,对于正整数n来说,如果它存在[2,n]范围内的质因子,要么这些质因子全部小于等于sqrt(n),要么只存在一个大于sqrt(n)的质因子,其他全部小于等于sqrt(n)。

分解质因数

  1. 枚举1~sqrt(n)范围内的所有质因子p(建一个素数表list),判断 p是否是n的因子(能否整除)
    ① 如果是,那么给ans结果数组中增加p,并初始化其个数为0。然后,只要p还是n的因子,就不断n除以p,每次操作令p的个数加1,直到p不是n的因子为止
    ② 如果不是,直接跳过
  2. 如果在上面的步骤结束后n仍然>1,说明n有且仅有一个大于sqrt(n)的质因子,这时需要把这个质因子加入ans结果数组,令其个数为1

至此,ans数组中存放的就是质因子分解的结果。

python可以用字典表示 {质因子:个数}
C++可以使用结构体:
定义结构体factor用来存放质因子及其个数。

struct factor{
   
	int x, cnt; //x为质因子,cnt为其个数
}fac[10];

由于2×3×5×7×11×13×17×19×23×29就已经超过了int范围,所以对int型的数来说数组大小只需要开到10就可以了。

C++

给出一个int范围的整数,按照从小到大的顺序输出其分解为质因数的乘法算式。
例如97532468 = 2^211171011291

#include<bits/stdc++.h>
using namespace std;
const int maxn =100010;
int prime[maxn],pNum = 0;//prime为素数表 
bool p[maxn] = {
   false};
void Find_Prime(){
    //构建素数表 
	for(int i =2;i<maxn;i++){
   
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值