小编mee*_*aig的帖子

将整数因式分解为尽可能接近平方的值

我有一个函数可以逐字节读取文件并将其转换为浮点数组。它还返回所述数组中的元素数量。现在我想将数组重塑为二维数组,形状尽可能接近正方形。

我们以数字 800 为例:

sqrt(800) = 28.427...

现在我可以通过反复试验找出25*32我正在寻找的解决方案。如果整数相乘的结果太高,我会递减sqrt(四舍五入到最接近的整数),如果结果太低,我会增加它们。

我知道对素数执行此操作的算法,但这对我来说不是必需的。我的问题是,即使我实现的蛮力方法有时也会卡住并且永远无法完成(这就是我任意限制迭代的原因):

import math

def factor_int(n):
    nsqrt = math.ceil(math.sqrt(n))

    factors = [nsqrt, nsqrt]
    cd = 0
    result = factors[0] * factors[1]
    ii = 0
    while (result != n or ii > 10000):
        if(result > n):
            factors[cd] -= 1
        else:
            factors[cd] += 1
        result = factors[0] * factors[1]
        print factors, result
        cd = 1 - cd
        ii += 1

    return "resulting factors: {0}".format(factors)

input = 80000
factors = factor_int(input)
Run Code Online (Sandbox Code Playgroud)

使用上面的脚本,输出将陷入循环打印 …

python algorithm cython factoring

6
推荐指数
1
解决办法
2155
查看次数

标签 统计

algorithm ×1

cython ×1

factoring ×1

python ×1