我已经有了素数因子化(对于整数),但是现在我想用高斯整数来实现它,但是我应该怎么做呢?谢谢!
答案 0 :(得分:68)
答案 1 :(得分:0)
如果您想要完整的单个单元格整数精度,请使用浮点作为实部和虚部,并定义gsub,gmul和具有舍入系数但未被覆盖的特殊除法gdivr。这是因为Pollard rho分解方法需要通过Euclid算法的gcd,稍微修改一下gmodulo:
gmodulo((x,y),(x',y'))=gsub((x,y),gmul((x',y'),gdivr((x,y),(x',y'))))
Pollard rho
def poly((a,b),(x,y))=gmodulo(gsub(gmul((a,b),(a,b)),(1,0)),(x,y))
input (x,y),(a,b) % (x,y) is the Gaussian number to be factorized
(c,d)<-(a,b)
do
(a,b)=poly((a,b),(x,y))
(c,d)=poly(poly((c,d),(x,y)),(x,y))
(e,f)=ggcd((x,y),gsub((a,b),(c,d)))
if (e,f)=(x,y) then return (x,y) % failure, try other (a,b)
until e^2+f^2>1
return (e,f)
正常起始值是a = 1,b = 0。
我在我的博客http://forthmath.blogspot.se
上使用了Forth编程的这种方法为安全起见,在使用整数浮点数时,在所有计算中使用舍入值。