输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )

什么是质因子

质因子(或质因数)在数论里是指能整除给定正整数的质数。根据算术基本定理,不考虑排列顺序的情况下,每个正整数都能够以唯一的方式表示成它的质因数的乘积。两个没有共同质因子的正整数称为互质。因为1没有质因子,1与任何正整数(包括1本身)都是互质。只有一个质因子的正整数为质数。

简而言之,也就是因数是质数的称为质因子。

解题思路
  1. 我们从因数为2开始循环,循环到数字结束,判断i是否能被整除,是则是该数字的因子,又因为质因子只要循环到开平方就行了,所以不用循环到该整数。

  2. 例如,对于正整数 12,它的质因子是 2 和 3。因为 2 和 3 都是质数,而且 12 可以被它们整除。

    以下是一些获取正整数质因子的基本步骤:

    • 从最小的质数开始,即 2,尝试将给定正整数除以 2。
    • 如果可以整除,将 2 作为一个质因子,并将被除数更新为除以 2 的结果。
    • 接着,再次尝试将被除数除以 2,直到不能整除为止。
    • 然后,尝试将被除数除以下一个质数,重复上述步骤,直到被除数变为 1。
  3. 为什么只循环到开平方就行了,因为一个数的因数都是成对的,比如

    12=1 *12
    =2*6
    =3*4
    =4*3
    =6*2
    =12*1
    比如25
    25=1*25
    =5*5
    =25*1
    如果到了他的根号,还没有一个因子出现,那么后半部分也不会有因子出现了

  4. 参考文件:
    https://blog.51cto.com/BigPanda/5469004
    https://blog.csdn.net/weixin_43899069/article/details/113059005
    https://zhidao.baidu.com/question/320350773.html

代码
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    while(line = await readline()){
        let tokens = line.split(' ');
        let num = parseInt(tokens[0]);
        let num_sqrt = Math.sqrt(num);
        let result = [];
       for (let i = 2; i <=num_sqrt; i++) {
        while(num%i === 0) {
             result.push(i);
            num /= i;
        }
       }
       if (num !== 1) {
        result.push(num);
       }
       console.log(result.join(' '));
    }
}()


  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值