Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 需要知道这是否是一种独特的分割方式吗?_Algorithm_Division_Factors - Fatal编程技术网

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

Algorithm 需要知道这是否是一种独特的分割方式吗?,algorithm,division,factors,Algorithm,Division,Factors,几个月前,我问了一个关于堆栈溢出的问题 在回答中,我很清楚,我的假设是错误的,算法无法在线性时间内找到因子 然而,我想知道的是,该算法是否是进行除法和查找因子的独特方法;也就是说,有没有类似/相同的除法?我在这里再次发布算法: 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

几个月前,我问了一个关于堆栈溢出的问题

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

然而,我想知道的是,该算法是否是进行除法和查找因子的独特方法;也就是说,有没有类似/相同的除法?我在这里再次发布算法:

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从mRmL移到r),然后将这个大的r除以mL,看看我们可以增加多少mR(对于减少一次mL,我们可以增加多少次mR)。因此剩余的r是r mod mL。 我已经计算了寻找因子所需的while循环数,对于所有数字,它都小于或等于5*N。审判庭需要更多时间*


感谢您的时间,

例如,在前面的问题中,您已经了解到了其他一些和GNFS。

主循环相当于以下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)
,下一条语句中
r/mL
的值为
mR/mL
1+mR/mL
。我同意(作为数值测试的结果)当你从循环中出来时,
mR*mL=N
,但我不明白为什么。如果你知道为什么,你应该解释为什么,如果你想让你的方法被认真对待的话


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

Ya我知道还有其他方法可以找到因子。我的问题是:这是一种独特的方法吗?就像Pollard的rho算法和GNFS是不同的一样?这与所有其他现有方法不同吗?如果我不清楚,请告诉我。@harish好的,那么你的意思是,这与所有其他因式分解算法有根本区别吗?老实说,我不确定这是否是一个因式分解算法,它似乎是在做试除法,但在一个移动的目标上,它真的有效吗?我正在编辑这个问题-为了回答你的评论,并进一步解释这个问题,因为评论部分的550个字符的回答很少:)最坏的情况是5*N,这是什么样的数字?顺便说一句,简单试算法的最坏情况是sqrt(N),并且您的方法似乎具有相同的最坏情况运行时间;为了371号。371~19的平方根。因此开始时为:>>18*20+11=371>>17*20+31=371>>17*21+14=371>>16*21+35=371>>16*22+19=371>>16*23+3=371。。考虑18×20(高度×宽度)是否为矩形。以11作为余数(行)。当从18中删除一行时,它意味着我可以将20移动到剩余部分,得到31。因为31比18大,我从31中去掉一个18,我可以把它加到矩形的宽度上,即从20到21,这个操作是除法操作,左边是余数。