基础练习 分解质因数

问题描述

求出区间[a,b]中所有整数的质因数分解。

输入格式

输入两个整数a,b。

输出格式

每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)

样例输入

3 10

样例输出基础练习 分解质因数_第1张图片

提示

先筛出所有素数,然后再分解。

数据规模和约定

2<=a<=b<=10000

代码

#include 
using namespace std;
#include
#include
#include
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;
}

测试数据

基础练习 分解质因数_第2张图片
基础练习 分解质因数_第3张图片

你可能感兴趣的:(蓝桥杯C++训练系统)