踩过的坑:一个因数是质因数,另一个因数不一定也是质因数(如2是12的质因数,但若输出12=2*6肯定不对)
不一定只有两个质因数,可能有多个或者只有它本身
质因数要从小到大输出
自己的代码又臭又长,还有点错半天找不出来为啥,于是copy了大佬的,来自 (蓝桥杯)分解质因数_X__ING的博客-CSDN博客
#include <iostream>
#include <math.h>
using namespace std;
/*
分解质因数
问题描述
求出区间[a,b]中所有整数的质因数分解。
输入格式
输入两个整数a,b。
输出格式
每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小到大的)
提示
先筛出所有素数,然后再分解。
数据规模和约定
2<=a<=b<=10000
*/
int main()
{
int a,b;
cin>>a>>b;
for(int m=a;m<=b;m++)
{
int c=m;
cout<<c<<"=";
int i=2;
while(i<=sqrt(m))
{
if(c%i==0)
{
c=c/i;
if(c>1) //即这个数可以分解
{
cout<<i<<"*";
continue;
}
if(c==1) //即为分解的最后一步
cout<<i<<endl;
}
i++;
}
if(c>1&&c<m) //c是最后一个素数,直接输出
cout<<c<<endl;
if(c==m) //m本身就是素数,无法被分解
cout<<m<<endl;
}
return 0;
}