需要知道这是一种独特的划分方式吗?

时间:2011-09-16 06:21:29

标签: algorithm division factors

几个月前,我在StackOverflow中的"Algorithm to find factors for primes in linear time"上提出了一个问题。

在回复中,我很清楚我的假设错误,而算法无法在线性时间内找到因子。

但是我想知道算法是否是一种独特的分割和查找因子的方法;这是做任何类似/相同的分工方法吗?我在这里再次发布算法:

Input: A Number (whose factors is to be found)
Output: The two factor of the Number. If the one of the factor found is 1 then it can be concluded that the
Number is prime.

Integer N, mL, mR, r;
Integer temp1; // used for temporary data storage
mR = mL = square root of (N);
/*Check if perfect square*/
temp1 = mL * mR;
if temp1 equals N then
{
  r = 0; //answer is found
  End;
}
mR = N/mL; (have the value of mL less than mR)
r = N%mL;
while r not equals 0 do
{
  mL = mL-1;
  r = r+ mR;

  temp1 = r/mL;
  mR = mR + temp1;
  r = r%mL;
}
End; //mR and mL has answer

让我知道您的意见/这个问题纯粹出于个人兴趣而知道是否存在类似的算法来进行除法和查找因素,我无法找到。

我理解并感谢您可能需要了解我的有趣的算法才能给出答案! :)

进一步说明: 是的,它适用于10以上的数字(我测试过)和所有正整数。 算法依赖于余数r来进一步推进。我基本上形成了这样一种观点,即对于一个数字,它的因素给了我们两个方面 矩形,其面积是数字本身。对于所有其他不是因素的数字,会有一个 剩下的是剩余的,或者因此矩形不能完整地形成。 因此想法是每减少mL,我们可以增加r = mR + r(基本上将mR从mR mL转移到r)然后将这个大r除以mL以查看我们可以增加多少mR(多少次我们可以增加mR一次减少mL)。因此,剩余的r是r mod mL。 我已经计算了查找因子所需的while循环次数,它对于所有数字都低于或等于5 * N.审判师将需要更多。*

感谢您的时间,Harish

2 个答案:

答案 0 :(得分:2)

主循环等效于以下C代码:

mR = mL = sqrt(N);
...
mR = N/mL; // have the value of mL less than mR
r = N%mL;
while (r) {
  mL = mL-1;
  r += mR;
  mR = mR + r/mL;
  r = r%mL;
}

请注意,在每个r += mR语句之后,r的值为r%(mL-1)+mR。自r%(mL-1) < mL起,下一个语句中r/mL的值为mR/mL1 + mR/mL。我同意(作为数值测试的结果)当你走出循环时它会解决mR*mL = N,但我不明白为什么。如果你知道为什么,你应该解释为什么,如果你想要认真对待你的方法。

就效率而言,您的方法使用与Fermat factorization相同数量的循环,尽管可以在不使用任何除法的情况下编写Fermat分解的内循环,其中您的方法使用两个除法运算(r/mLr%mL)在其内循环中。在两种方法的最坏情况下,内部循环运行大约sqrt(N)次。

答案 1 :(得分:1)

还有其他人,例如Pollard's rho algorithm,以及您在上一个问题中已经告知过的GNFS。