吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1311|回复: 3
收起左侧

[求助] 如何用python快速分解素因数

[复制链接]
sikro 发表于 2021-2-22 22:20
有没有算法可以快速计算出一个合数的因数,由于数字特别大(几千位),不能用递归方式求解,有没有快速的算法?

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
niushengsan + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ymhld 发表于 2021-2-22 22:36
递归也很快吧
kesai 发表于 2021-2-22 22:50
本帖最后由 kesai 于 2021-2-22 22:51 编辑

以前的代码,自己看吧,nodejs的版本
[JavaScript] 纯文本查看 复制代码
//ref:https://www.geeksforgeeks.org/find-largest-prime-factor-number/

/**
 * 查找最大因子
 * [url=home.php?mod=space&uid=952169]@Param[/url] {*} x 
 */
function get_max_factor(x) {
    var maxPrime = -1;
    while (x % 2 === 0) {
        x /= 2;
        maxPrime = 2;
    }
    for (var i = 3; i < Math.sqrt(x) + 1; i += 2) {
        while (x % i === 0) {
            x /= i;
            maxPrime = i
        }
    }
    if (x > 2) return x;
    return maxPrime;
}
/**
 * 分解因子并返回各个因子组成个数
 * @param {} x 
 */
function get_factors(x) {
    var counts = {};
    while (x % 2 === 0) {
        x /= 2;
        counts[2] = counts[2] ? counts[2] + 1 : 1;
    }
    for (var i = 3; i < Math.sqrt(x) + 1; i += 2) {
        if (x % i === 0) {
            var count = 0;
            while (x % i === 0) {
                x /= i;
                count++;
            }
            counts[i] = count;
        }
    }
    if (x > 2) counts[x] = 1;
    return counts;
}

/**
 * 大数的分解,以数组形式返回因子组成
 * @param {*} n 
 */
function factorize(n) {
    var res = []
    while (!(n % 2 > 0)) {
        n /= 2;
        res.push(2);
    }
    for (i = 3; i <= Math.sqrt(n); i += 2) {
        while (n % i == 0) {
            res.push(i);
            n = n / i;
        }
    }
    if (n > 2) {
        res.push(n);
    }
    return res;
}

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
麦子1995 + 1 + 1 用心讨论,共获提升!
sikro + 1 + 1 谢谢@Thanks!

查看全部评分

Ldfd 发表于 2021-2-23 09:07
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 06:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表