问题描述
求出区间[a,b]中所有整数的质因数分解。
输入格式
输入两个整数a,b。
输出格式
每行输出一个数的分解,形如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>
using namespace std;
bool fun(int num,int a[],int size)
{
for (int i = 0; i <size; i++)
{
if (num == a[i]) return 1;
}
return 0;
}
int main()
{
int a; int b;
cin >> a >> b;
int* a1 = new int[b - 1]; a1[0] = 2;
int j = 1;
for (int i = 3; i <= b; i++)//首先找出2~b中所有的质数
{
int flag = 0;
for (int k=2; k<= i / 2; k++)
{
if (i % k == 0)
{
flag = 1;
break;
}
}
if (flag == 0) { a1[j] = i; j++; }
}
for (int i = a; i <= b; i++)
{
cout << i << "=";
if (fun(i, a1, j)) cout << i;//该数是质数
else
{
int t = i;
int f= 0;
while (f == 0)
{
for (int k = 0; k < j; k++)
{
if (t % a1[k] == 0)//找到该数的一个质因数
{
int m = t / a1[k];
if (fun(m, a1, j))//m也是质因数
{
f = 1;
a1[k]>=m ? cout <<m<< "*" << a1[k] : cout <<a1[k]<< "*" <<m;
}
else
{
cout << a1[k] << "*"; t =m;
}
break;
}
}
}
}
cout << endl;
}
}