Miller Robin大素數判定


Miller Robin算法 當要判斷的數過大,以至於根n的算法不可行時,可以采用這種方法來判定素數。 用於判斷大於2的奇數(2和偶數需要手動判斷),是概率意義上的判定,因此需要做多次來減少出錯概率。 Template: ```C++ typedef long long ll; ll kmul(ll a,ll b,ll mod) { ll res=0; while (b) { if (b&1) res=(res+a)%mod; a=(a+a)%mod; b>>=1; } return res; } ll kpow(ll a,ll b,ll mod) { ll res=1; while (b) { if (b&1) res=kmul(res,a,mod)%mod; a=kmul(a,a,mod)%mod; b>>=1; } return res; } bool Mil_Rb(ll n,ll a) { ll d=n-1,s=0,i; while (!(d&1)) { d>>=1; s++; } ll t=kpow(a,d,n); if (t==1||t==-1) return 1; for (i=0;i a[i]&&!Mil_Rb(n,a[i])) return 0; } return 1; } ```


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM