-3
int modx = 101;
int xy = -4/-3;
int answer = xy%modx;
System.out.println("answer= "+answer);

プログラムは答え1を返しますが、「PARI GP」で答えを確認すると、答えは35になるはずです。 http://en.wikipedia.org/wiki/PARI/GP

Java実装で回答35を取得するにはどうすればよいですか?

using Extended Euclidean algorithm, (**3**,101) we get (101*1) + (3*34)
GCD = 1

-4/-3 = 4/3
34*4 = 136
136%101 = 35

それが私がこれを説明できる最善の方法です

4

4 に答える 4

1

Java(-4/-3) mod 101になる方法はありません。35または、賢明な算術システムで... AFAIK。

より良い答えが必要な場合は、どのようにして 35 になるのか説明してください...または、「PARI GP」がどのようにしてその答えを得たのかを示してください。(ここで実際に起こっていることは、「PARI GP」を間違って使用していることだと思います。)


あなたが書いた:

-4/-3%101 と入力しただけで、答えは 35 に等しい

実際、PARA/GPチートシートには次のように書かれています。

"output previous line, the lines before:    %, %`, %``, etc."

したがって、Para GP の「%」は、モジュラス/剰余を意味するものではありません。基本的に、あなたが入力したものは、あなたが考えているものとはまったく異なるものを意味します.

于 2013-04-30T08:12:56.987 に答える
1

JLSによると、

The remainder operation for operands that are integers after binary 
numeric promotion (§5.6.2) produces a result value such that 
(a/b)*b+(a%b) is equal to a.

したがって、式xy%modx(1%101)は上記の関係に従う必要があります。値を代入すると、この関係に従うには、 でなければならないことがわかり(1%101)ます1

于 2013-04-30T08:13:56.063 に答える
1

PARI GP は剰余算術の規則には従いません。モジュラスは整数値でのみ使用できます。そのため、Java はキャストします

-4/-3 to (int) 1

ご覧のように

1 % 101 = 1

したがって、Javaは正しい答えを返しています...

于 2013-04-30T08:14:42.237 に答える