Thực hành tính toán trên maple
3.1.5. Thuật toán kiểm tra số giả nguyên tố mạnh.
Bớc 1: Phân tích số n ra thừa số nguyên tố .
Bớc 2: Từ kết quả phân tích trên ta biết rằng n -1 có thể viết dới dạng n - 1 = 2st (s là số tự nhiên bất kỳ, t là một số lẻ). Ta kiểm tra điều kiện:
[>is(b&^t mod n= 1) ;
Nếu điều kiện trên nghiệm đúng (lệnh cho giá trị true ) thì n là số giả nguyên tố mạnh cơ sở b, ngợc lại ta kiểm tra điều kiện sau :
[> is(b&^t-1 mod n = 0) ;
Nếu lệnh cho giá trị true thì n là số giả nguyên tố mạnh cơ sở b .
Nếu kết quả là false ta tiếp tục kiểm tra điều kiện b2jt + =1 0(mod )n
có đợc thoả mãn với một j nào đó trong khoảng từ 0 đến s - 1 hay không. Nếu có một j nh vậy thì kết luận n là số giả nguyên tố mạnh cơ sở b, ngợc lại ta kết luận không phải. Có thể thực hiện điều này bằng lệnh sau đây :
[>seq (b&^( (2^j)*t)+1 mod n, j= 0..s-1) ;
Kết quả của lệnh là một dãy bao gồm s số tự nhiên, nếu có một số trong dãy đó bằng 0 thì kết luận n là số giả nguyên tố mạnh cơ sở b, ngợc lại là không phải.
Thí dụ, ta kiểm tra xem số 25326001 có phải là số nguyên tố mạnh cơ sở 2 bằng [> n:=25326001; b:=2; n := 25326001 b := 2 [> isprime(n); false [> factor(n-1); 2 ( )4 3( )3 5( )3 7( ) 67( ) Ta có : [> s:=4; t:=3^3*5^3*7*67; s := 4 t := 1582875 [> is(b&^t mod n = 1);
false
Ta kiểm tra tiếp
[> is(b&^t-1 mod n = 0);
false
[> seq (b&^ ((2^j)*t)+1 mod n, j = 0..s-1);
0, 2, 2, 2
Nh vậy số 25326001 là số giả nguyên tố mạnh cơ sở 2. Với b = 3; 5 ta cũng có kết quả tơng tự . Nhng với b = 7 ta có :
[> n:=25326001; b:=7; n := 25326001 b := 7 [> s:=4; t:=3^3*5^3*7*67; s := 4 t := 1582875 [> is(b&^t mod n = 1); false [> is(b&^t-1 mod n = 0); false
[> seq (b&^ ((2^j)*t)+1 mod n, j= 0.. s-1);
19453142, 16857741, 11448588, 10127251
Vậy, Số 25326001 là số giả nguyên tố mạnh cơ sở 2,3,5 nhng
không là số giả nguyên tố mạnh cơ sở 7.