将数字计算在极限内的最佳方法

时间:2012-10-02 23:22:46

标签: c algorithm numbers factors

我有一段代码来计算数字的因子。然后使用这些因子来编程控制器的两个维度(m * N)。控制器每N个字节产生一个中断,因此在控制器限制内选择最大的N值是有益的。在下面的代码片段中,我将此限制称为MAX_DIM。

下面列出的代码是有效的,并按上述方式计算因子。我的问题是关于我目前没有以最佳方式处理的角落案例。

虽然不太可能,但该函数需要处理一个素数大于MAX_DIM的输入值;在这种情况下,它应该返回一个错误。在下面的代码片段中,我通过检查其中一个因子(m)来处理这个问题,直到它达到任意选择的值,此时我确定找到一个因子不再可行。虽然这在实践中起作用,但我几乎可以肯定,必须有数学和计算上更优雅的方法来检测这种情况。寻找一些算法的指针,我可以适应这种情况。

m = tr_size/MAX_DIM;  // sets up a minimum value for m


if (m == 0)
{
    N = tr_size;
    m = 1;
    return 0;
} 
else
{
    /* TODO: check for m <= 128 ensures a mechanism to quit if 
     * tr_size is a prime number. Is there a better way to do this?
     */

    while ((((tr_size/m) > MAX_DIM) || (tr_size % m) != 0) && (m <=128))
    {
        m++;        
    }

    if (m > 128) 
    {
        return 1;  // error: cannot compute factors

    }

    N = tr_size/m;

    return 0;
}

1 个答案:

答案 0 :(得分:1)

检查因子时,您只需检查小于或等于被分解数的平方根的值。任何大于平方根的因子都会有一个小于平方根的相应因子。