0

これらのパラメータ(pow(1,3,3))を使用しているのに、なぜこのエラーメッセージが表示されるのですか?:

sage: pow(1,3,3)                                    
3
3/2
3/2
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)

/home/kai/<ipython console> in <module>()

/home/kai/<ipython console> in pow(a, e, n)

/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/rings/rational.so in sage.rings.rational.Rational.__mod__ (sage/rings/rational.c:19891)()

/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/rings/integer.so in sage.rings.integer.Integer.inverse_mod (sage/rings/integer.c:32726)()

ZeroDivisionError: Inverse does not exist.

捕虜():

def pow(a,e,n):
....:     num = 1
....:     while e >= 1:
....:         print(e)
....:         if (e%2) == 1:
....:             num = (num*a) % n  
....:         e = e/2
....:         print(e)
....:         a = (a*a) % n
....:     return num
....:
4

2 に答える 2

3

実装した平方アルゴリズムによる剰余累乗では、整数を使用する必要があります。

e = e/2Rational を返します3/2

これを整数に変換する必要がありe = (e/2).floor()ます。

于 2012-12-18T14:26:29.380 に答える
-1
a = (a*a) % n

a = 1*1 % 1 a -> 0 あなたのケースが 0 であることを意味するので、ここで

num = (num*a) % n 

0 % 3 になります。

編集: Python で 3/2 % 3 を実行することは可能ですか?

于 2012-12-18T14:20:05.497 に答える