miller-rabin素性測試演算法是概率演算法,不是確定演算法。然而測試的計算速度快,比較有效,被廣泛使用。
另外乙個值得介紹的演算法是aks演算法,是三位印度人發明的,aks是他們的姓氏首字母。ask演算法是確定演算法,其時間複雜度相當於多項式的,屬於可計算的演算法。
**來自sanfoundry的c++ program to implement miller rabin primality test。
源程式如下:
/* * c++ program to implement miller rabin primality test
*/#include #include #include #define ll long long
using namespace std;
/* * calculates (a * b) % c taking into account that a * b might overflow
*/ll mulmod(ll a, ll b, ll mod)
y = (y * 2) % mod;
b /= 2;
}return x % mod;
}/*
* modular exponentiation
*/ll modulo(ll base, ll exponent, ll mod)
return x % mod;
}
/* * miller-rabin primality test, iteration signifies the accuracy
*/bool miller(ll p,int iteration)
if (p != 2 && p % 2==0)
ll s = p - 1;
while (s % 2 == 0)
for (int i = 0; i < iteration; i++)
if (mod != p - 1 && temp % 2 == 0)
}return true;
}//main
int main()
{ int iteration = 5;
ll num;
cout<<"enter integer to test primality: ";
cin>>num;
if (miller(num, iteration))
cout<
MillerRabin 快速的素數概率判定法
1.作用 快速判斷單個數是否為質數 2.原理 介紹費馬小定理 對於每乙個素數p,都有ap 1 1 modp 但是不是對於每乙個有ab 1 1 modb 的b都是素數 如果存在b滿足上述規則,那麼b有1 4的機率為素數 millerrabin通過多次隨機生成b並使用以上方法進行判斷,能把錯誤的機率降到...
對miller rabin反向取數的測試
對於miller rabin 的判斷是把1個奇數寫成d 2 n,其中d為奇數,進行費馬測試 a d mod p,為1,不為1,再進行二次探測,根據a n a 2n a 4n a p 1 mod p看是否為 1,如果為 1,則可能為素數,否則肯定是合數。能否反過來判斷?對於乙個奇數n,a n 1 2 ...
素數判定的一些討論(Miller Rabin演算法)
很久沒有寫部落格了。最近軍訓加開學,感覺刷題速度有降低,要補一補。回歸正題,正式進入數論階段,討論一下關於素數判定的那些事。直接根據素數的定義列舉 i 從2到 n 1 如果n i 0 n 為合數。時間複雜度 o n bool is prime int n 發現若存在 i n 使得n i 0,則必有n...