分解质因数(超大规模版)

给出一个正整数N(2<=N<=2147483647),要求将其分解成质因子的连乘积。(质因子连乘时按从小到大顺序)(注:某一正整数的质因子指能整除该数的质数整数,也称质因数或质约数。 如24的因子有1 、2、3、4、6、8、12、24。其中是质数的是2,3 所以24的质因子就是2,3。) 例如:当N=24时 结果为:24=2*2*2*3 又如:当N=13时 (13的质因子只有13一个) 输出结果为:13=13

输入格式

只有一行,即一个整数N

输出格式

只有一行,按格式输出

输入/输出例子1

输入: 38

输出: 38=2*19

浅说:这个问题本身不难,难点是如何避免超时的问题,我们要把判断质数函数进行优化,分解质因数部分进行优化算法~,好啦,下面请看代码实现~

#include<bits/stdc++.h>
using namespace std;
int m;
bool zhishu(int n)  //优化质数函数
{
    if(n == 2) return true;
    if(n % 2 == 0) return false;
    for(int i = 3;i <= sqrt(n);i+=2)
    {
        if(n%i == 0)
            return false;
    }
    return true;
}

int main() {
    cin >> m; // 输入整数 m
    cout << m << "="; // 输出格式,例如 "24="

    if (zhishu(m)) { // 如果 m 是质数,直接输出 m
        cout << m;
        return 0;
    }

    for (int i = 2; i <= m; i++) { // 从 2 开始尝试分解质因数
        if (m % i == 0) { // 如果 i 是 m 的因子
            while (m % i == 0) { // 完全筛去 i 因子
                if (i != m) cout << i << "*"; // 输出因子 i
                m /= i; // 更新 m 的值
            }
        }
        if (zhishu(m)) { // 如果剩下的 m 是质数,直接输出
            cout << m;
            return 0;
        }
    }
    return 0;
}

创造不易,如果对您有所帮助,请一键三连哦~你的支持是我继续创造的动力源泉~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小假

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值