-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

没有办法进入(-4/-3) mod 101Java 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 回答
0

我认为这源于不了解模数的定义。以一种故意非数学严谨的方式:

模数是指在你带走指定数量的整数后还剩下多少,所以:

1%5
No 5s go into 1 so answer is 1

7%5
1 lot of 5 goes into 7, so 7-1*5=2

16%5
5 lots of 5 go into 16, so 16-3*5=1

这就是模数的工作原理,从中可以清楚地看出:

1.3333%101 
No 101s go into 1.3333, so answer is 1.3333 (or 1 if you let java round to 1 first)
于 2013-04-30T08:28:07.310 回答