平方形式因式分解(SQUFOF)是一种特殊的整数因式分解方法。它通常用于在二次筛和数字域筛因子分解算法的双大时间变量中分割小半素数。我们研究了SQUFOF在上一次练习;今天我们研究SQUFOF的“连分数”变体。
尽管SQUFOF的数学基础是高斯的二次形式,但SQUFOF是由Daniel Shanks在研究连续分数因子分解算法的失败时发现的;你应该读他的纸张这是我读过的最好的数学发现过程的演示。Shanks算法扩展了n个,被分解的数,在收敛点中搜索二次型,即完美平方;在这一点上,它不同于CFRAC算法,该算法将多个收敛点组合成一个完美的正方形。我们从纸张Jason Gower和Sam Wagstaff提供了SQUFOF的标准描述:
[注:在以下描述中,注意区分符号Q̂和问;第一个在问,第二个没有。有些浏览器会以可读的方式显示“复合扬抑符”,但有些浏览器则不会。在我可以使用的浏览器上,只有四分之一的浏览器能够清晰地显示符号,大概只有当我将字体扩展到相当大的时候。如果有疑问,请查看下一页上的程序,其中第一个符号被命名为Q帽子
第二个符号命名为q个
. ]
变量N个是要因子化的整数,S公司记得q个0,q个保持电流q个我,P(P)和P’保持两个连续值P(P)我,Q̂和问保持两个连续值问我、和t吨是用于更新的临时变量问最后,B类是算法放弃之前测试的平方形式数量的上限。
1.初始化:读取奇数正整数N个需要考虑因素。如果N个是整数的平方,输出平方根并停止。如果N个≡1 mod 4,然后设置D类← 2N个;否则,设置D类←N个.在任何情况下,请设置S公司← ⌊√D类⌋,问̂ ← 1,P(P)←S公司,问←D类−P(P)·P(P),L(左)← ⌊2√2√D类⌋,B类← 2 ·L(左)、和我← 0.
2.向前循环以找到合适的正方形:重复步骤2a至2e我= 1, 2, 3, ….
2a:设置q个← ⌊(S公司+P(P)) /问⌋和P’←q个·问−P(P).
2b页:如果问≤我,然后:
如果问是平的,把这对放进去(问/ 2,P(P)模块(问/2)进入队列;否则,如果问≤L(左)/2,然后把这对(问,P(P)国防部问)在队列上。
2c码:设置t吨←问̂ +q个· (P(P)−P’),问̂ ←t吨、和P(P)←P’.
第2天:如果我很奇怪,请转至步骤2e。如果问不是整数的平方,请转至步骤2e。否则,设置第页← √问,是一个正整数。如果没有配对(第页,t吨)在队列中第页划分P(P)−t吨,然后转至步骤3。如果第页>1,有一对(第页,t吨)在队列中第页划分P(P)−t吨,然后删除从QUEUE开始到并包括该对的所有对,并转至步骤2e。如果第页=1,有一对(1,t吨)在QUEUE中,算法失败,因为我们已经遍历了判别式4的二次型的整个主周期N个没有找到合适的平方形式。
2e:让我←我+ 1.如果我>B类,放弃。否则,转至步骤2a。
3.计算平方根的反比:设置问̂ ←第页,P(P)←P(P)+第页· ⌊(S公司−P(P)) /第页⌋,和问← (D类−P(P)·P(P)) /问̂.
4.沿相反方向循环,以找到系数N个:
4a:设置q个← ⌊(S公司+P(P)) /问⌋和P’←q个·问−P(P).
4b:如果P(P)=P’,然后转至步骤5。
4c:设置t吨←问̂ +q个· (P(P)−P’,问̂ ←问,问←t吨、和P(P)←P’并转至步骤4a。
5.打印系数N个:如果问是偶数,设置问←问/ 2.输出因子问属于N个.
随后,在论文的第5.2节中,Gowers和Wagstaff给出了使用乘数的说明米帮助找到一个因子N个,将上述算法更改如下:
将步骤1更改为:读取奇数正整数N个需要考虑因素。如果N个是整数的平方,输出平方根并停止。如果百万牛顿选择1 mod 4,然后设置D类← 2百万牛顿;否则,设置D类←百万牛顿。在任何情况下,请设置S公司← ⌊√D类⌋,问̂ ← 1,P(P)←S公司,问←D类−P(P)·P(P),L(左)← ⌊2√2√D类⌋,B类← 2 ·L(左)、和我← 0.
将步骤2b更改为:Let克←问/gcd公司(问, 2米).如果克≤L(左),放置(克,P(P)国防部克)在队列上。[注:如果你正在阅读Gowers和Wagstaff论文的链接版本,这个公式错误地给出为(克,B类国防部克)那个错误使我痛苦了好几个小时。 ]
在步骤5中,更换问通过问/gcd公司(问, 2米)在因子之前问是输出。
要找到系数,首先使用乘数米= 1.如果这样做失败,请尝试另一个乘数,从集合3、5、7、11、3·5=15、3·7=21、3·11=33、5·7=35、5·11=55、7·11=77、3·5·7=105、3·11=165、3·7·11=231、5·7·11=385、3·7.11=1155,或任何其他小奇数素数的无平方积。
您的任务是使用乘数实现SQUFOF。完成后,欢迎您阅读或运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。
页:1 2