问题描述
求出区间[a,b]中所有整数的质因数分解。
输入格式
输入两个整数a,b。
输出格式
每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
3=3
4=22
5=5
6=23
7=7
8=222
9=33
10=25
提示
先筛出所有素数,然后再分解。
数据规模和约定
2<=a<=b<=10000
#include<bits/stdc++.h>
using namespace std;
int n,m;
int prime[10005],pn=0;
bool isprime(int x)
{
if(x==1)
return false;
for(int i=2; i<=sqrt(x); i++)
{
if(x%i==0)
return false;
}
return true;
}
int Find(int n)
{
for(int i=1; i<=n; i++)
{
if(isprime(i))
{
prime[pn++]=i;
}
}
}
struct dd
{
int k,cnt;
} fac[105];
int main()
{
cin>>m>>n;
Find(n);
for(int t=m; t<=n; t++)
{
cout<<t<<"=";
int number=t;
int sqr=sqrt(number),num=0;
for(int i=0; i<pn&&prime[i]<=sqr; i++)
{
if(number%prime[i]==0)
{
fac[num].k=prime[i];
fac[num].cnt=0;
while(number%prime[i]==0)
{
fac[num].cnt++;
number/=prime[i];
}
num++;
}
}
if(number>1)
{
fac[num].k=number;
fac[num++].cnt=1;
}
int flag=0;
for(int i=0; i<num; i++)
{
for(int j=1; j<=fac[i].cnt; j++)
{
if(flag>0)
cout<<"*";
cout<<fac[i].k;
flag++;
}
}
cout<<endl;
}
return 0;
}