30,228
社区成员




给定一个区间 [a,b],请你求出区间 [a,b] 中所有整数的质因数分解。
输入共一行,包含两个整数 a,b。
2≤a≤b≤103。
每行输出一个数的分解,形如 k=a1×a2×a3⋯(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
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
void solve(int x) //分解质因子
{
for(int i=2;i<=x;i++)
{
while(x%i==0) //找因子
{
cout<<i; //找到因子,输出因子
x/=i; //除因子,下一个循环继续找,找到是素数为止
if(x!=1) cout<<"*"; // 输出到1为止
}
}
}
int a,b;
int main()
{
cin>>a>>b;
for(int i=a;i<=b;i++)
{
cout<<i<<"=";
solve(i);
cout<<endl;
}
return 0;
}
试除法的效率不高,数据规模不大时可用这种方法。关键点:1.找因子:x%i==0,其中i就是x的因子 2.去除因子:n/=i