问题描述
求出区间[a,b]中所有整数的质因数分解。
输入格式
输入两个整数a,b。
输出格式
每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
提示
先筛出所有素数,然后再分解。
数据规模和约定
2<=a<=b<=10000
代码
#include <iostream>
using namespace std;
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int tag[10000];
//判断是否是质数
int isprime(int n)
{
int t=sqrt(n)+1;
for(int i=2;i<=t;i++){
if(n%i==0)
return 0;//不是质数
}
return 1;//是质数
}
int main()
{
int l,r;
cin>>l>>r;
//第一步,求l-r中的质数
for(int i=l;i<=r;i++)
tag[i]=isprime(i);
//循环输出
for(int i=l;i<=r;i++){
if(tag[i]==1)//说明是质数,直接输出i=i
cout<<i<<"="<<i<<endl;
else{//说明是合数
cout<<i<<"=";
int temp=i;
int j=2;//最小的质数
while(temp!=1){
if(temp%j==0&&temp/j==1)//如果是最后一个质因子,只打印j
{cout<<j;break;}
else if(temp%j==0&&temp/j!=1)//如果还没有分解到最后一个质因子,打印j*
{cout<<j<<"*";temp=temp/j;}
else{
while(1){
j++;
if(isprime(j)==1)//寻求大一点的质因子
break;
}
}
}
cout<<endl;//换行
}
}
return 0;
}
测试数据