Giới thiệu
Các kiến thức liên quan tới số học luôn đóng vai trò quan trọng trong lập trình thi đấu. Chúng có ứng dụng thực tiễn liên quan đến đời sống, đồng thời cũng đưa cho ta những quan sát, nhận xét quan trọng khi tiếp cận một vấn đề trong lập trình. Đôi khi, những quan sát này chính là "key" để giải một bài toán hóc búa, hay đơn giản giúp bạn có thêm ý tưởng để cải thiện độ phức tạp của chương trình. Nếu không nắm vững các lý thuyết liên quan đến số học, bạn dễ bị mắc phải những sai sót liên quan đến tính chất trong các phép toán. Trong series về lý thuyết số học, Viblo sẽ trình bày các chuyên đề quan trọng giúp bạn tự tin hiểu và xử lý các bài lập trình thi đấu nặng về tính toán học. Ở bài viết đầu tiên, Viblo sẽ giới thiệu tới các bạn về đồng dư, một khái niệm thường xuyên gặp phải trong lập trình thi đấu. Bài viết được tham khảo từ sách Lý thuyết sơ cấp của các số - W. SIERPINSKI
Đồng dư và các tính chất
Giả sử và là các số nguyên. Ta nói rằng đồng dư với theo modulo nếu hiệu của và chia hết cho . Sử dụng ký hiệu được đề xuất bởi Gauss ta viết:
(1)
Công thức (1) tương đương với
Rõ ràng nếu hai số nguyên là đồng dư modulo thì chúng có cùng số dư khi chia cho . Ký hiệu đồng dư được sử dụng khá giống ký hiệu . Ta liệt kê dưới đây một số mối liên hệ giữa các đồng dư thức và các đẳng thức.
Tính phản xạ: Mọi số nguyên là đồng dư với chính nó theo mọi modulo, nghĩa là với mọi số nguyên a và mọi số tự nhiên vì rõ ràng chia hết cho mọi số tự nhiên .
Tính đối xứng: Đồng dư thức (1) tương đương với đồng dư thức vì rõ ràng các số và cùng chia hết hoặc cùng không chia hết cho .
Tính kết hợp: nếu và thì vì ta có đẳng thức và lưu ý tổng của hai số chia hết cho là một số chia hết cho .
Ta có một số tính chất khác của đồng dư sau đây. Ta chứng minh hai đồng dư thức với cùng modulo có thể cộng hoặc trừ tương ứng các vế. Thật vậy giả sử
(2)
Để chứng minh và ta lưu ý các đẳng thức và . Tương tự sử dụng đẳng thức , ta chứng minh được từ (2) suy ra đồng dư thức . Hệ quả là ta có thể nhân theo vế hai đồng dư thức với cùng modulo.
Các định lý về các tính chất cộng, trừ, nhân các đồng dư thức ở trên có thể mở rộng cho hữu hạn các đồng dư thức.
Định lý về phép cộng các đồng dư thức chứng tỏ ta có thể chuyển vế đối dấu mọi hạng tử trong một đồng dư thức bởi vì phép toán này tương đương với việc trừ các hạng tử trong cả hai vế.
Từ tính chất phép nhân các đồng dư thức chứng tỏ có thể nhân một đồng dư thức với mọi só nguyên tùy ý và do đó ta có thể lũy thừa cả hai vế của đồng dư thức với số mũ bất kỳ.
Tuy nhiên ta không thể chia một đồng dư thức cho một đồng dư thức khác (ngay cả khi thương số là các số nguyên). Chẳng hạn và nhưng không có .
Do một ước số của ước số của một số nguyên cũng là ước số của số nguyên đó nên nếu thì đồng dư thức chứng tỏ .
Tính kết hợp của các đồng dư thức cùng với tính chất cộng và nhân các đồng dư thức chứng tỏ trong đồng dư thức cho trước ta có thể thay mọi hạng tử hoặc nhân tử bởi các số đồng dư với nó.
Quy tắc này không đúng với các lũy thừa. Chẳng hạn đồng thức thức không thể thay thế bởi đồng dư thức mặc dù .
Giả sử là đa thức bậc với hệ số nguyên. Ký hiệu là số tự nhiên và là các số nguyên thỏa mãn . Từ định lý về các lũy thừa tự nhiên và tính chất nhân các đồng dư thức suy ra
Cộng lại ta có . Nghĩa là . Ta đã chứng minh được
Định lý 1. Nếu là đa thức một biến với hệ số nguyên thì đồng dư thức suy ra đồng dư thức .
Định lý 1 cho ta quy tắc cho biết một số có chia hết cho 9,7,11,13,27,37 hay không.
Ký hiệu là số tự nhiên. Biểu diễn của trong hệ thập phân được cho bởi biểu diễn có dạng . Đặt (3)
Khi đó là đa thức hệ số nguyên và (4)
Theo Định lý 1 thì vì ta có (5)
Nhưng và hệ quả là theo và thì chứng tỏ mọi số tự nhiên sai khác tổng các chữ số của nó trong hệ cơ số 10 một bội số của 9. Do đó chia hết cho 9 khi và chỉ khi tổng các chữ số của nó chia hết cho 9. Tổng quát hơn nếu ký hiệu là tổng các chữ số của (trong hệ thập phân) thì với các số tự nhiên và ta có , suy ra . Vì nên .
Từ (3) và đồng dư thức , Định lý 1 suy ra , do đó theo (4) và (3) ta có . Từ đây ta nhận được quy tắc về tính chia hết cho 11. Bây giờ ta tìm các quy tắc về tính chia hết cho 7 hoặc
Ký hiệu là số trong hệ thập phân có các chữ số là (ký hiệu này là cần thiết để phân biệt với tích các chữ số ). Mọi số tự nhiên đều có dạng Vì và nên ta có và đồng dư thức tương tự cũng nhận được khi thay modulo 7 bởi modulo
Các đồng dư thức này cũng cho ta biết quy tắc về tính chia hết cho 7 hoặc 13. Chẳng hạn ta có theo cả modulo 7 và modulo 13 . Vì số trong vế phải các đồng dư thức này (bằng -242) là không chia hết cho cả 7 lẫn 13 nên không chia hết cho cả 7 lẫn
Các quy tắc với 27 và 37 được dựa trên tính chất theo và . Từ đây ta nhận được các quy tắc tương tự với các trường hợp ở trên. Chẳng hạn ta có theo và . Số trong vế phải là có thể viết thành theo và . Số chia hết cho nhưng không chia hết cho và do đó số cũng chia hết cho nhưng không chia hết cho .
Một số bài tập
1. Tìm hai chữ số tận cùng của số .
Lời giải. Ta có vì vậy . Nhưng suy ra theo quy nạp Do đó . Vậy hai chữ số tận cùng của là 7 và 6.
2. Chứng minh rằng ít nhất một trong sáu đồng dư thức sau là đúng (Erdos):
- ,
- ,
- ,
- ,
- ,
- với số nguyên bất kỳ.
Chứng minh. Nếu số nguyên không thỏa mãn cả 1) và 2) thì nó không chia hết cho 2 và 3 do đó có dạng với là số nguyên và là một trong các số . Khi đó dễ dàng kiểm tra số thỏa mãn các đồng dư thức 3),3),5),4),3),3),4),6) tương ứng.
Ghi chú. P.Erdos đã đặt ra bài toán sau đây: cho trước số tự nhiên , có tồn tại hay không tập hợp hữu hạn các đồng dư thức với modulo phân biệt lớn hơn mà mọi số nguyên thỏa mãn ít nhất một trong số chúng? H.Davenport đặt ra giả thuyết rằng câu trả lời là khẳng định nhưng sẽ không có một lời giải đơn giản. P.Erdos đã tự chứng minh giả thuyết này trong trường hợp bằng cách sử dụng một số đồng dư thức với modulo là ước số của 120 . D.Swift đã cho lời giải với bằng cách sử dụng các đồng dư thức với modulo là ước số của 2880. Giả thuyết đã được chứng minh với mọi (Choi).
3. Tìm hai chữ số tận cùng của số .
Lời giải. Theo modulo 100 thì . Ta có suy ra với là số tự nhiên. Vì vậy từ suy ra chứng tỏ chữ số tận cùng của là 9 và chữ số liền trước đó là
4. Tìm hai chữ số tận cùng của số .
Lời giải. Từ bài tập 3 suy ra do đó với là số tự nhiên. Suy ra . Vì vậy hai chữ số tận cùng của là hai chữ số tận cùng của .
Tài liệu tham khảo
- Lý thuyết sơ cấp của các số - W. SIERPINSKI
- cp-algorithms.com
- Handbook Competitive Programming - Antti Laaksonen
- Competitve programming 3 - Steven Halim, Felix Halim
- Giải thuật và lập trình - Thầy Lê Minh Hoàng