最佳方法以在限制范围内的数字
题
我有一段代码来计算数字的因素。然后使用这些因素来编程控制器的两个维度(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;
}
. 解决方案
在检查因素时,您只需检查要小于或等于所在数量的平方根的值。大于平方根的任何因素将具有比平方根的相应因子。
不隶属于 StackOverflow