Miller Rabin素數測試

2021-06-25 09:36:24 字數 864 閱讀 6608

公尺勒拉賓素數測試 

測試大素數的原基於   

如果  n 是素數 且與a 互質 那麼則有  a ^(n -1)  = 1 (mod n)  

這個和費馬小定理    a^n  = a(mod n) 差不多

1、因此首先可以進行快速冪取模函式  qpow()  

2 、先將y(y = n-1) 的偶數倍先將其右邊為0 的部分去掉 ,然後進行快速冪求模

3、 這裡求出的結果可能不會是1  因此將n 適當的放大  x= (x*x)%n  y 也同時擴大1倍 這裡的目的其實就是為了在求快速冪當中取模 過程中模出現為1 或者n-1的情況

4、 最後的結果如過 x = n - 1或者 y 是奇數的話,說明已經通過了測試

在32位的數字中, 經驗顯示 只要是以 2 、7 、61 為底, n 為冪的數,通過了測試,那麼這個數就是素數

//最後的結果是要麼x = n -1 或者是 為奇數

return x == n-1 || (y&1) == 1;

}int isprime32(int n )

int main()

else

}return 0 ;

}

Miller Rabin 素數測試

miller rabin 是乙個基於小費馬定理的隨機演算法。先來介紹一下費小馬定理 費馬小定理 當 p 為質數,則有當 1 leqslant a leqslant p 1 時有 a equiv 1 mod p 可能是素數 然後介紹一下素數二次測試 如果 p 是素數 x 2 equiv 1 mod p...

Miller Rabin素數測試學習筆記

好幾天前看了算導上的miller rabin素數測試演算法,今天正好總結一下,寫寫筆記。說miller rabin測試以前先說兩個比較高效的求a b n 和 ab n 的函式,這裡都是用到二進位制思想,將b拆分成二進位制,然後與a相加 相乘 a b n 例如 b 1011101那麼a b mod n...

MillerRabin素數測試法

知道大家比較關心正確,網上教程好難找到資料,我就自己去wiki翻了 if n 2,047,it is enough to test a 2 if n 1,373,653,it is enough to test a 2 and 3 if n 9,080,191,it is enough to tes...