編程語言中,取餘和取模的區別究竟是什麼?

【取模和求餘原理】
定義:a = bq + r 且 0 <= |r| < |b|。
題目:給定a和b,要求mod(a,b)和rem(a,b);算法

分析:對於知足a = bq + r 且 0 <= |r| < |b|條件的數據,若是a不能被b整除,有兩對(q,r),其中一對中r爲正數(正餘數),另外一對中r爲負數(負餘數)。rem

結果:取模的定義有不少種,不一樣語言的取模定義可能不同,最多見的是:
取模:q更趨近無窮小(負無窮)時的r,即mod(a,b);
求餘:q更趨近0時的r,即rem(a,b);
(取餘,遵循儘量讓商向0靠近的原則;取模,遵循儘量讓商向負無窮靠近的原則;)io


【舉例】
例子1:mod(7,3)=1,rem(7,3)=1
候選組1:(q1,r1)=(2,1); 7=2*3+1
候選組2:(q2,r2)=(3,-2); 7=3*3+(-2)
取模:由於q1比q2更加趨近於負無窮,因此取(q1,r1)=(2,1),mod(7,3)=1;
求餘:由於q1比q2更加趨近於0,因此取(q1,r1)=(2,1),rem(7,3)=1;test

例子2:mod(7,-3)=-2,rem(7,-3)=1
候選組1:(q1,r1)=(-2,1); 7=(-2)*(-3)+1
候選組2:(q2,r2)=(-3,-2); 7=(-3)*(-3)+(-2)
取模:由於q2比q1更加趨近於負無窮,因此取(q2,r2)=(-3,-2),mod(7,-3)=-2;
求餘:由於q1比q2更加趨近於0,因此取(q1,r1)=(-2,1),rem(7,3)=1;原理

例子3:mod(-7,3)=2,rem(-7,3)=-1
候選組1:(q1,r1)=(-2,-1);  -7=(-2)*3+(-1);
候選組2:(q2,r2)=(-3,2);   -7=(-3)*3+2;
取模:由於q2比q1更加趨近於負無窮,因此取(q2,r2)=(-3,2),mod(7,-3)=2;
求餘:由於q1比q2更加趨近於0,因此取(q1,r1)=(-2,-1),rem(7,-3)=-1;百度

例子4:mod(-7,-3)=-1,rem(-7,-3)=-1
候選組1:(q1,r1)=(2,-1);  -7=2*(-3)+(-1)
候選組2:(q2,r2)=(3,2);  -7=3*(-3)+2
取模:由於q1比q2更加趨近於負無窮,因此取(q1,r1)=(2,-1),mod(7,-3)=-1
求餘:由於q1比q2更加趨近於0,因此取(q1,r1)=(2,-1),rem(7,-3)=-1數據

【更多】一、其餘的取模運算,例如r必須和a負號相同等等,原理相似,根據條件取模時對候選組進行選擇,所以再也不展開。二、取模在灰度方案和abtest中常常用到(對隨機算法要求不高)。翻了下百度計算器,對了下答案,米問題,交卷~;

做者:小婷子
連接:https://www.zhihu.com/question/30526656/answer/160437482
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。語言

相關文章
相關標籤/搜索