C 實現的Miller Rabin素性測試程式

2021-07-11 21:37:42 字數 1190 閱讀 3089

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...