资源限制
内存限制:512.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
求出区间[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
提示
先筛出所有素数,然后再分解。
数据规模和约定
2<=a<=b<=10000
#include<iostream>
using namespace std;
const int N = 1e4 + 10;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)//IOS 提升cin cout 速度
int book[N];//标记数组
int sushu[N];//素/质数数组
void Is_sushu(int m)//筛法求素数
{
for(int i = 2; i <= m; i++)//初始化标记数组,开始假设所有的数为素数
book[i] = 1;
for(int i=2;i<=m;i++){//每次将一个素数i的所有倍数标记为非素数
if(book[i])
for(int j = 2 * i; j <= m; j += i)
book[j] = 0;
}
int j = 0;
for(int i = 2; i <= m; i++)
if(book[i])//把所有被标记为素数的加入素数数组
{
sushu[j] = i;
j++;
}
}
int main()
{
IOS;
int a, b;
cin >> a >> b;
Is_sushu(b);
for(int p = a; p <= b; p++)
{
int n = p;
cout << n << "=";
int i = 0;
int first = 1;//标志变量,用于第一个因数前不输出乘号
//将n除以素数数组中的数,直到商为1时结束
while(n != 1)//当n==1时,即分解质因数完毕
{
if(n % sushu[i] == 0)
{
n /= sushu[i];
if(first)
{
cout << sushu[i];
first = 0;
}
else
cout << "*" << sushu[i];
}
else i++;//如果不能整除,即更换下一个素数
}
cout << endl;
}
return 0;
}