當前位置:編程學習大全網 - 編程軟體 - pascal判斷素數的Miller Rabin算法

pascal判斷素數的Miller Rabin算法

米勒-拉賓算法基於費馬定理;

如果n是素數且(a,n)=1,則a (n-1) = 1 (mod n)。

米勒-拉賓算法是費馬定理的逆向運用;

如果有足夠多的A,(A,n)=1使得A (n-1) = 1 (mod n)成立。

那麽n是壹個質數。

但是它不是壹個完美的算法,

如果以2、3、5、7為基數,那麽在2.5 * 10之內只有3215031751這個數被誤判。

因為a b可以在logB的時間復雜度內完成。

所以Miller-Rabin算法的復雜度O(logn)比naive O(sqrt(n))要快得多。

程序:(可以讓P數組隨機,不壹定要用2,3,5,7做基數)

常數

p:數組[1..4] of integer=(2,3,5,7);

定義變量

n,I:longint;

f:布爾型;

函數exp(a,b:longint):longint;//計算a b除以n的余數。

定義變量

t:q word;

開始

如果b=0,則退出(1);

如果b=1那麽退出(a mod n);

t:=sqr(exp(a,b div 2))mod n;

如果b mod 2=1那麽t:= t * a mod n;

結束;

開始

readln(n);

f:=真;

for i:=1到4 do

if exp(p[i],n-1)& lt;& gt那麽1

開始

f:=假;

打破;

結束;

if then writeln(' YES ')else writeln(' NO ');

結束。

其中需要判斷n為1,2,3,5,7的情況(開頭加個if就行)。

這個程序可以處理所有大於7的質數

  • 上一篇:如何用AI軟件做出3D形狀?AI如何制作3D形狀?
  • 下一篇:空中未來無人機技術(北京)有限公司怎麽樣
  • copyright 2024編程學習大全網