※ 引述《a100500 (黑色幽默)》之铭言:
: 如题...
: 我们都知道 1除3 = 0 余 1
: 4除3 = 1 余 1
: 但是 -1除3的余数到底是多少呢?
: 至少我用JAVA跟R算出来的答案是不一样的...
: 到底正解是多少?!
: 除法好难!!!!
好的,关于你的问题,我很认真看了一遍,还去翻了原文书
首先呢,你的例子就错了
why?
先这样说吧
小时候一定有这种经验
就是在上数学课的时候
老师看着你写的数学作业破口大骂
‘都讲了几次你还是没在听!"除" 跟 "除以"是不一样的!’
当时无辜的我们,虽然有在听只是没记住,却还是一句话也不敢吭
虽然被骂完还是听不懂老师洗勒工啥毁,反正做就对惹
然后不知道多久的数年过后
才知道"除" 跟 "除以" 是不同的
简单说 1除3 ,其实是 3除以1 也就是 3/1 = 3才对
4除3 ,其实是 3除以4 也就是 3/4 = 0......3才对
所以原PO一开始举的例子就是错的了
不过没关系,大家都知道你的意思
所以我们回来你的问题
※ 引述《a100500 (黑色幽默)》之铭言:
: 我们都知道 1除3 = 0 余 1
: 4除3 = 1 余 1
: 但是 -1除3的余数到底是多少呢?
1除以3 = 0 余 1 ('_')
4除以3 = 1 余 1 (o'_'o)
-1除以3 = ? 余 ?? (ob'_'ov)
这问题不难,我们先看看除法的规则
Division Algorithm :
Given integers a and b, with b > 0, there exist unique
integers q and r satisfying
a = qb + r ,0 <= r <= b
The integers q and r are called, respectively, the quotient and remainder
in the division of a and b.
('_') 式 可以改写成 1 = 0*3 + 1
(o'_'o)式 可以改写成 4 = 1*3 + 1
(ob'_'ov)式 就变成 -1 = ?*3 + ??
在脑袋还没想到之前我们的膝盖就立马知道
阿! ? = 0 , ?? = -1 嘛!So easy!!!
但是仔细看那串看不懂的英文里,有一句话写着
0 <= r <= b
OK,你可能还抓不到重点,我再mark强调一下
0 <= r
0 <= r
0 <= r
是的,明文规定,余数要大于等于零
也就是??要大于等于0
那刚刚膝盖好不容易想出来的 -1 = 0*3 + (-1) 不就没用了
非也
我们只要用一个技巧就好了,那就是 "正负抵销" !
就是+1-1啦
(ob'_'ov)式就变成
-1 = (0 +1 -1 )*3 + (-1)
-1 = (0 -1 )*3 + 3 + (-1)
-1 = (-1)*3 +2
所以余数答案就是2!
有人可能会问说,为何一定要+1-1,不能+2-2或+3-3逆?
如果+2-2的话,就会导致余数r > 除数b ,违反规定0 <= r <= b
那为何要这样规定咧?那牵扯到唯一性的问题
这又是另一个故事了
Q.E.D.