Miller Rabin整理筆記

2022-03-01 04:21:49 字數 1037 閱讀 8296

目錄乙個數到底是不是素數

首先列一下我們可以求素數的東西

根號暴力求

\(o(nloglogn)\)的埃氏篩

\(o(n)\)的尤拉篩

還有我們要學習的miller_rabin演算法

對了,還有神奇的6倍法(也許叫這個吧)

bool pd(int x)
先去掉偶合數和2吧,現在剩下奇數了吧

費馬小定理對素數一定成立,但合數是不一定成立的,多試幾次成立機率還是挺

大的,沒啥說的

\(carmichael\)數本身是合數,而且\(1\)到\(n-1\)都滿足飛馬小定理,suah as:561

著重說一下二次探測吧

考慮\(x^≡1(mod n)\)的根,如果n為奇素數,那跟就只有1和-1兩個根(移項之後顯然)

設\(n-1=2^*d\),d是奇數,如果存在\(0≤k<r,a^*d}≠1,-1(mod n)\)

但是\(a^*d}≡1(mod n)\),那就不滿足費馬小定理,那麼n就是合數了

憑藉著二次探測和費馬小定理,我們出錯的機率就大大降低了

但只測一次錯誤還是不夠(應該是一次失敗的機率是四分之一)

我們用前10個素數,在oi界就可以無憂了

複雜度\(o(k*logn)\)

使用快速傅利葉變換能夠將這個時間推進到\(o(klognlog lognlog log logn) ="o"(klogn).\)

#include using namespace std;

typedef long long ll;

ll q_pow(ll a, ll k, ll p)

int prime = ;

bool detective(ll a, ll n)

x = y;

} return false;

}bool miller_rabin(ll n)

return true;

}int main()

}

Miller Rabin素數測試學習筆記

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

Miller Rabin演算法學習筆記

miller rabin演算法是乙個隨機化素數測試演算法,作用是判斷乙個數是否是素數,且只要你臉不黑以及常數不要巨大一般來講都比 o sqrt n 的樸素做法更快。miller rabin主要基於費馬小定理 a equiv 1 mod p 其中 p 是質數。於是就有閒得沒事幹的一群科學家們想,這個問...

Miller Rabin素數測試

公尺勒拉賓素數測試 測試大素數的原基於 如果 n 是素數 且與a 互質 那麼則有 a n 1 1 mod n 這個和費馬小定理 a n a mod n 差不多 1 因此首先可以進行快速冪取模函式 qpow 2 先將y y n 1 的偶數倍先將其右邊為0 的部分去掉 然後進行快速冪求模 3 這裡求出的...