使用SageMath在Python中对非常大的整数进行除法



我正在使用Python和SageMath实现Wiener的指数攻击。

我的代码如下

from sage.all import *
# constants
b = some_very_large_number
n = some_very_large_number
b_over_n = continued_fraction(b/n)
while True:
t_over_a = b_over_n.convergent(i+1)
t = t_over_a.numerator()
a = t_over_a.denominator()
# check if t divides ab-1
if ((t != 0) and (gcd(a*b-1, t)== t)):
print("Found i: ", i)
break
i += 1

我发现循环不会永远结束,并在while循环之前添加了这行代码。

print(b_over_n.convergent(5))

我发现不管怎样b_over_n总是返回0。我还打印出了type(b_over_n),并检查它是'long'类型的。

我查看了SageMath手册,但还没有发现任何有用的东西。

我是不是做错了什么?

原来我使用的是Python2,其中int/int将返回int。因此,在我的情况下,由于b小于nb/n自动返回0

最新更新