C 在一个极限内考虑一个数的最佳方法

C 在一个极限内考虑一个数的最佳方法,c,algorithm,numbers,factors,C,Algorithm,Numbers,Factors,我有一段代码来计算一个数字的因子。然后使用这些因子对控制器的两个维度(m*N)进行编程。控制器每N个字节生成一个中断,因此在控制器限制范围内选择最大的N是有益的。在下面的代码片段中,我将此限制称为MAX_DIM 下面列出的代码是功能性的,并按上述方式计算系数。我的问题是关于一个我目前没有以最佳方式处理的角落案例 虽然不太可能,但函数将需要处理一个素数大于MAX_DIM的输入值;在这种情况下,它应该返回一个错误。在下面的代码片段中,我通过检查一个因子(m)来处理这个问题,直到它达到一个任意选择的值

我有一段代码来计算一个数字的因子。然后使用这些因子对控制器的两个维度(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;
}
m=tr\u size/MAX\u DIM;//设置m的最小值
如果(m==0)
{
N=tr_尺寸;
m=1;
返回0;
} 
其他的
{
/*待办事项:检查m MAX_DIM)| |(tr_size%m)!=0)和(m 128)
{
返回1;//错误:无法计算因子
}
N=tr_尺寸/m;
返回0;
}

检查系数时,您只需检查小于或等于所计算数字平方根的值。任何大于平方根的因子的相应因子都将小于平方根。

对于MAX_DIM=8K,此函数预期的一些样本结果。tr_尺寸:7Km=1,N=7KTr_尺寸:10Km=2,N=5KTr_尺寸:15Km=3,N=5KTr_尺寸:16Km=2,N=8KTr_尺寸:x(其中x为素数但小于最大值)m=1,N=xI确实将此作为我的选择之一……好处是,对于较小的数字,终止速度更快,但对于较大的数字,它可以循环超过当前指定的128倍。我选择了128(sqrt(16K))来处理我认为合理的函数输入值。通过阅读你的答案,我觉得使用平方根可能是唯一的选择。谢谢