求乙個數的相反數演算法

2021-04-12 16:44:12 字數 694 閱讀 9251

求乙個數的相反數演算法(inverse to x modulo (1 << mod))

(相反數的定義是:求y 使(x * y) mod (1 << mod) ==  1)

/**/param x x:inverse to x modulo (1 << mod)

*/param mod mod:inverse to x modulo (1 << mod)

*/return the inverse number

*/static unsigned long inverse (unsigned long x, int mod)

return rslt; 

}一般的演算法都是用euclidean的逆步驟去解,但是這個演算法不是。這個算的基本原理如下:

x為奇數時,存在0還有乙個定理需要說明:x*y % a =(x % a)*(y % a) % a,

也就是:兩個數相乘後取模,等於取模後相乘,再取模。這個也不用證明了吧。

注意演算法裡的mask=2^mod - 1 ,二進位制表示為111111(mod個1)

ps.不知道為什麼寫成 1<<(mod-1)<<1 - 1,而不直接寫成 1《現在看迴圈裡的操作就比較簡單了:

(先不看rslt)

迴圈裡的x不斷自乘,然後後取模,

所以x的值依次為

x(初始值)

附測試函式:

int main()

JAVA 返回乙個數值的相反數的幾種方式

乙個方法接收乙個int型別值,需要返回它的相反數.如傳入1,返回 1 傳入 22,返回22 最簡單的方式是return 0 number 還有其他方式 public class kata public class kata public class kata 還有個更奇葩的 return 13333...

重複重新整理相反數求最大和

題目描述 description 給你n個數,並且可以對其中任意m個數求相反數,並且這個操作可以執行任意多次,求這串數的和的最大值 輸入描述 input description 第一行是兩個整數n,m 第二行是n個整數 輸出描述 output description 乙個整數,這串數的和的最大值 樣...

EOF女神的相反數

description 作為女神,eof是很喜歡照鏡子的 同樣在數學中,eof也是很喜歡相反數的。不過她既然是女神,她認知的相反數和我們凡人怎麼能一樣呢?給定乙個十進位制數a,eof女神定義的相反數就是把這個數轉化為二進位制之後,忽略高位的0,然後作軸對稱,例如對於十進位制的數123 1111011...