Nếu người tạo khóa RSA vô tình chọn hai số nguyên tố p,q gần nhau thì môđun n=p⋅q có thể bị phá vỡ rất nhanh bằng thuật toán phân tích Fermat, không cần thử chia lần lượt các số nguyên tố.
Ý tưởng: vì p,q gần nhau nên tồn tại a,b nguyên không âm sao cho
n=a2−b2=(a−b)(a+b),p=a−b, q=a+b.
Thuật toán bắt đầu từ a=⌈n⌉, kiểm tra a2−n có phải số chính phương không; nếu chưa thì tăng dần a lên 1 đơn vị và lặp lại, đến khi tìm được b nguyên sao cho b2=a2−n.
Cho n=p⋅q với p,q là hai số nguyên tố (có thể bằng nhau) và hiệu ∣p−q∣ đủ nhỏ để thuật toán Fermat hội tụ nhanh, hãy tìm p và q.
Ví dụ: n=10201=101×101, in ra 101 101.
Một dòng chứa số nguyên lẻ n (n là tích của hai số nguyên tố p≤q với ∣p−q∣ không vượt quá vài chục nghìn, 9≤n<1030).
In ra hai số nguyên p và q (p≤q) cách nhau bởi một khoảng trắng, sao cho p⋅q=n.
Ví dụ:
Đầu vào:
10201
Đầu ra:
101 101
Đầu vào:
99799811
Đầu ra:
9973 10007
Đang tải editor...