Phương pháp Kasiski là kỹ thuật thám mã cổ điển dùng để ước lượng độ dài khóa của một bản mã Vigenère, dựa trên quan sát: nếu một cụm 3 ký tự liên tiếp trong bản rõ bị lặp lại và khoảng cách giữa hai lần xuất hiện là bội số của độ dài khóa, thì cụm ký tự mã hóa tương ứng trong bản mã cũng sẽ trùng lặp.
Cho bản mã C (chữ in hoa A-Z, không khoảng trắng, có thể rỗng). Hãy thực hiện thuật toán Kasiski sau đây để ước lượng độ dài khóa:
Nếu không có tam đồ nào lặp lại (kể cả trường hợp ∣C∣<3), in ra 0.
Ví dụ: C= ACEACEACEACEACEACEACEACEACEACE (chu kỳ lặp rõ ràng là 3 — các tam đồ ACE, CEA, EAC đều lặp lại đều đặn với khoảng cách 3) → in ra 3.
Một dòng duy nhất: chuỗi bản mã C (0≤∣C∣≤105, có thể rỗng), chỉ gồm chữ in hoa A-Z.
Một số nguyên duy nhất trên một dòng — độ dài khóa ước lượng theo thuật toán Kasiski nêu trên (in ra 0 nếu không xác định được, theo đúng quy tắc đã mô tả).
Ví dụ:
Đầu vào:
ACEACEACEACEACEACEACEACEACEACE
Đầu ra:
3
Đầu vào:
Đầu ra:
0
Đang tải editor...