Định nghĩa 1.1. Số nguyên tố là số lớn hơn 1, không chia hết cho nguyên dương nào ngoài 1 và chính nó. Số nguyên lớn hơn 1 không phải là số nguyên tố được gọi là hợp số.
Theo [7], thuật toán Fermat là một trong những thuật toán kiểm tra số nguyên tố có tốc độ thực hiện nhanh. Đây là thuật toán kiểm tra xác suất dựa trên định lý Fermat nhỏ:
Định lý 1.1 (Fermat nhỏ). Nếu 𝑝 là số nguyên tố và 𝑎 là số không chia hết cho 𝑝
thì:
𝑎𝑝−1 ≡ 1 (𝑚𝑜𝑑 𝑝)
Hệ quả 1.1.Nếu 𝑝 là số nguyên tố và 𝑎 là số nguyên dương thì:
𝑎𝑝 ≡ 𝑎 (𝑚𝑜𝑑 𝑝)
Xét ví dụ 𝑎 = 2,
27−1 = 64 ≡ 1 (mod 7) và 28−1= 128 ≡ 0 (mod 8)
Từ hai ví dụ trên cho thấy, khi 𝑝 là số nguyên tố thì 2𝑝−1 ≡ 1 (𝑚𝑜𝑑 𝑝), và cũng cho một phỏng đoán rằng, nếu 𝑝 không phải là số nguyên tố thì 2𝑝−1 ≢ 1 (𝑚𝑜𝑑 𝑝). Tuy nhiên, phỏng đoán này không đúng, chẳng hạn như: 𝑛 = 314 = 11 × 31
không phải là số nguyên tố, nhưng nó vẫn thỏa mãn 2314−1 ≡ 1 (𝑚𝑜𝑑 314). Do vậy định lý Fermat nhỏ với a = 2 có thể được sử dụng để kiểm tra một số là hợp số nhưng không thể dùng để kiểm tra một số chắc chắn là số nguyên tố. Các số mà thoả mãn Định lý Fermat mà không phải là số nguyên tố gọi là số giả nguyên tố (pseudoprime) và theo [7] được định nghĩa như sau:
Định nghĩa 1.2. Một số giả nguyên tố cơ sở 𝑎 là một hợp số nguyên 𝑛 thoả mãn công thức 𝑎𝑛−1 ≡ 1 (𝑚𝑜𝑑 𝑛).
Nếu số giả nguyên tố cơ sở a không tồn tại, thì Định lý Fermat nhỏ cho một cách rất đơn giản để kiểm tra số nguyên tố: một số n là số nguyên tố nếu và chỉ nếu
𝑎𝑛−1 ≡ 1 (𝑚𝑜𝑑 𝑛). Đáng tiếc số giả nguyên tố cơ sở 𝑎 lại tồn tại với mọi cơ sở, vì vậy Định lý Fermat chỉ cho một cách kiểm tra thiên về hợp số. Thuật toán như sau:
20
boolean pseudoprime(n,b) {
if (b^(n-1)% n == 1) return true; else return false;
}
Một số 𝑛 vượt qua kiểm tra số giả nguyên tố với vài cơ sở thì khả năng nó là số nguyên tố khá chắc chắn.
Theo [7], thuật toán Fermat được xây dựng trên cơ sở thuật toán kiểm tra thiên về hợp số ở trên. Nó sẽ kiểm tra một số 𝑛 là giả nguyên tố với 𝑘 cơ sở được chọn một cách ngẫu nhiên và kết luận là một số nguyên tố với xác suất nào đó nếu và chỉ nếu nó vượt qua 𝑘 kiểm tra. Thuật toán như sau:
boolean fermat(n,k) {
for (i from 1 to k) {
b = random(2,n-1);
if(pseudoprime(n,b) != true) return false; }
return true; }
Thuật toán pseudoprime có độ phức tạp thời gian là 𝑂(𝑙𝑜𝑔 𝑛). Thuật toán kiểm tra Fermat thực hiện thuật toán pseudoprime 𝑘 lần vì vậy độ phức tạp thời gian
𝑂(𝑘 × 𝑙𝑜𝑔 𝑛). Do vậy nó là thuật toán xác suất kiểm tra số nguyên tố rất hiệu quả. Trong thực nghiệm, luận án sử dụng thuật toán Fermat để kiểm tra số nguyên tố trong lược đồ mật mã khóa công khai Rabin với 𝑘 = 300.
21