0
点赞
收藏
分享

微信扫一扫

试题 基础练习 分解质因数

何以至千里 2022-04-05 阅读 71

资源限制

内存限制: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;
}
举报

相关推荐

0 条评论