c# - 分解最大数

标签 c# algorithm factors

这里是示例代码

public static decimal factorization(decimal num, decimal factor)
        {

            if (num == 1)
            {
                return 1;
            }
            if ((num % factor)!= 0)
            {

                while(num% factor != 0)
                {
                    factor++;
                }

            }

            factors.Add(factorization(num / factor, factor));
            return factor;

        }

注意:我将初始化因子设置为全局。

以上代码适用于示例输入 90、18991325453139 但不适用于输入 12745267386521023 ... 那么我该怎么做呢?我怎样才能有效地实现这一目标......我知道递归调用会消耗内存,这就是为什么我检查了最后一个输入而没有递归......但它也不起作用

最佳答案

你可以使用它,如果

factor*factor > num

那么num是质数

它将复杂度从 O(n) 降低到 O(sqrt(n))

编辑

while(num% factor != 0)
{
    factor++;
    if(factor*factor>num){ // You can precalc sqrt(num) if use big arifmetic
        factor=num; //skip factors between sqrt(num) and num;
    }
}

关于c# - 分解最大数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6889495/

相关文章:

c# - System.Net.IPAddress.Address' 已过时

algorithm - 直接和间接 CRC 之间的区别

algorithm - 将一个数因式分解为 m 个因子,以最小化其中最大的一个

r - 在 R 中进行线性回归时如何有条件地删除 NA 观察因素?

c# - 获取数据网格中所选项目的行索引

c# - 如何使用 C# 和 Open XML SDK 按特定文本拆分 Word 文档?

c# - 指南 - 扩展方法与部分类

python - 使用单个 for 循环的列表中相同数字之间的距离

c - 预定义的运算符优先级

regex - 通过融合和 reshape 包重新使用 colsplit 正则表达式切割列