Thuật toán Trial Division

Một phần của tài liệu Nghiên cứu và phát triển hệ mật mã khóa công khai ứng dụng trong bảo mật dữ liệu và xác thực các giao dịch điện tử (Trang 33)

Theo định nghĩa số nguyên tố là số chỉ có hai ƣớc số là 1 và chính nó. Do vậy, cách đơn giản để kiểm tra một số n là nguyên tố bằng cách kiểm tra các số từ 2 đến n-1 có là ƣớc số của n. Để kiểm tra một số à là ƣớc số của n, chúng ta sử dụng phép toán modulo để kiểm tra khi phần dƣ của phép chia n cho a là zero. Nếu a mod n = 0 thì a là ƣớc số của n, và n không phải là số nguyên tố. Phƣơng pháp này rất không hiệu quả, bởi vì với một số n cần phải thực hiện n-2 phép chia. Chúng ta sẽ có một cải tiến nhỏ làm cho thuật toán hiểu quả hơn theo quan sát sau: nếu n có ƣớc a  n thì nó phải có một ƣớc số là b =

a n

n. Một cách hình thức nó đƣợc phát biệu bởi bổ đề dƣới đây:

Bổ đề 2.2.1:Nếu n không có bất kỳ ước số a nào trong khoảng 1<an, thì n là số nguyên tố.

Chứng minh: Giả sử n không có ƣớc số a trong khoảng 1 < a n, và n không phải số nguyên tố. Theo giả thiết, n có một ƣớc số b thoả mãn n< b < n, và có thể viết n = bc với một số nguyên c thoả mãn n< c < n. Tuy nhiên, điều này có nghĩa là bc >

n n = n, trái ngƣợc với bc = n. Do đó giả thuyết là sai, và n là số nguyên tố. Theo bổ đề trên có thuật toán xác định số nguyên tố nhƣ sau:

Thuật toán này thực hiện tối thiểu n phép toán để kiểm tra n là số nguyên tố. Nếu n=2s thì thời gian thực hiện của thuật toán là O( s

2 ) = O(2s/2), là hàm mũ của s. Có thể cái tiến thuật toán ở trên với một vài nhận xét sau. Đầu tiên, biết rằng nếu n

không chia hết cho 2 thì nó cũng không, thì nó cũng không chia hết cho bất cứ số nào là bội của 2. Điều tƣơng tự cũng đƣợc áp dụng cho bất cứ số nào khác, nhƣ vậy chúng ta chỉ cần kiểm tra các số nguyên tố nhỏ hơn n là ƣớc số của n. Điều này là dễ dàng nếu có sẵn danh sách các số nguyên tố nhỏ hơn n(cách tiếp cận này là sàng Eratosthenes). Thậm chí nếu không có danh sách số nguyên tố ta vẫn có thể dễ dàng loài đi các thừa số của các trƣờng hợp không phải số nguyên tố.

Mọi số nguyên tố lớn hơn 2 đều là lẻ, nhƣ vậy tất cả các số chẵn có 2 là số chia. Nhƣ vậy chỉ cần kiểm tra các số lẻ sau 2. Tƣơng tự nhƣ vậy, tất cả các số nguyên tố sau không phải là bội số của 3, vì vậy chúng ta chỉ cần kiểm tra các số tƣơng đƣơng với 1 mod 6 hoặc 5 mod 6. Chiến lƣợc này đƣợc cài đặt bằng cách lần lƣợt thêm 24 vào số chia, nó khiến thuật toán phức tạp lên một chút. Sự tối ƣu có tiếp tục bằng cách loại các số là bội của 5, 7, .v.v... Tuy nhiên, lƣu lại các số kiểm tra trở thành cồng kềnh cho các giá trị lớn hơn, và sự lỗ lực đó trả giá bằng hiệu quả của thuật toán. Dƣới đây là thuật toán đã đƣợc cải tiến:

Thuật toán này bằng 2/3 số phép toán so với thuật toán ban đầu bằng cách chỉ kiểm tra các số chia tƣơng đƣơng với 1 mod 6 và 5 mod 6, nhƣng độ phức tạp vẫn là hàm mũ

O( s

2 3 2

).

Ví dụ: một số 512 bit phải thực hiện khoảng 2256 phép toán kiếm thử với thuật toán ban đầu, còn với thuật toán cải tiến thì bằng 2/3 x 2256 > 2255. Nhƣ vậy cả hai thuật toán này vẫn rất không hiệu qua.

Một phần của tài liệu Nghiên cứu và phát triển hệ mật mã khóa công khai ứng dụng trong bảo mật dữ liệu và xác thực các giao dịch điện tử (Trang 33)