2^31-1是質數對32位計算機帶來什麼好處了么?

我這個人自從學了抽象代數以後就特別喜歡質數

今天腦洞大開 突然發現2^31-1是質數

那麼32位計算機的普通整數上限是個質數這個巧合

在計算上有什麼意義么

質數階的群結構比較單純 在計算上是個好事吧

經過@zero提醒 我的腦洞有發展了一下

"Z+模一個質數的乘法剛好是群 那32位的帶符號整數的正數部分在帶模乘法和加法下剛好是個域不是么? 和Q的代數類似呢!那至少說明32位計算機整數除法都可以通過乘一個數實現"


其他方面不清楚,但是從通信加密的角度來說是有意義的。正好實習的時候接觸過相關方面。

截斷加密通信的一種方法,就是因為如果採用非對稱加密,那麼密鑰的傳遞都是在一個素數域中,如果這個素數並不是2的次冪的話,加密產生的信息就會產生嚴重的分布傾斜。因為數據傳輸的時候依然是要2的次冪為單位傳輸,那就會有一些值永遠達不到。而這個就可以用來判斷信道上的通信是否是以公鑰方式進行加密的。

而為了解決這個問題,現在通行的做法是利用一種Daniel J. Bernstei et.al. [1]以及 Mehdi Tibouchi et. al. [2] 提出的&<&&>的函數將素數域上的數值映射到接近於2的次冪上去。

那麼,如果通信加密用的素數域,正好就是2的次冪減1那世界多美好!!

Reference:

[1] Daniel J. Bernstein, Mike Hamburg, Anna Krasnova, and Tanja Lange. Elligator: Elliptic-curve points indistinguishable from uniform random strings. In Virgil Gligor and Moti Yung, editors, ACM CCS, 2013

[2] Diego F.Aranha, Pierre-Alain Fouque, Chen Qian, Mehdi Tibouchi, Jean-Christophe Zapalowicz: Binary Elligator Squared.Seleted Areas in Cryptography 2014: 20-37


屁用沒有...32位整數補碼對應的是mod 2^32同餘...(其實補碼就是同餘)

用32隻是32爽啊...多整的數!5個0!

(其實是因為1double word=2 word=4byte=32bit)

你這麼想,456三個數怎麼著也得出一個素數吧...中央決定就是你了5...

小數據裡面麥森數是可以反過來用的...

即2^5-1=31是素數

從而2^31-1也是素數


hash的時候可以使用位運算的黑科技快速對2^31-1取模!媽媽再也不用怕我hash被卡常啦!

UPD:

x%((1&<&<31)-1)=x((1&<&<31)-1)+x&>&>31

你看常數一下就下去啦!

(為啥你們都說沒啥用啊……卡常不是很好的用途嗎……


(答案可能較大, 輸出前請 mod 10000007)


最近在尋找一個uid生成演算法,看到了這個文章

How to Generate a Sequence of Unique Random Integers

裡面提供的演算法能把[0,4294967291)的數字進行「偽隨機」的映射

由於腳本語言類型系統的限制,我現在要從uint32改成int32的

按照演算法的要求,上界必須滿足:1、素數;2、模4餘3;

很巧,2^32-1剛好滿足這兩個性質


模它所得的餘數是不同的2^32個,很多


對於計算偽隨機數還是很方便的


巧合歸巧合,但意義還是有的

正如題主所說,在做a / b時(不妨設b = 2^c * d),如果你確定一定以及肯定能整除的話,就可以用(a &>&> c) * (d^-1)來代替

用同樣的方法也能夠驗證a mod b是否等於0,即判斷b * (a &>&> c) * (d^-1)是否等於a

不過我所說的這個用途實在是小…除非b是事先知道的常數或者存在大量不同的a和相同的b,要不然你求d的逆就得不償失了…


不認為有什麼關聯


推薦閱讀:

為什麼兩個負數相乘等於一個正數,而不是等於負數?
如何證明韋達給出的圓周率的計算公式?
本科數學系的你們後來怎麼樣了呢?
如何清晰、形象化地解釋點集拓撲中「緊」這個概念?
積分的區間再現公式應該在什麼情況下使用?

TAG:數學 | 數論 | 計算機科學 | 素數 | 理論計算機科學 |