Chỉnh hợp (không lặp) chập của là số cách chọn phần tử trong tập hợp phần tử không lặp và có phân biệt thứ tự.
Kí hiệu: hoặc
Ví dụ: cho tập hợp , mang nghĩa có bao nhiêu cách chọn 2 phần tử trong 3 phần tử sao cho các phần tử không lặp lại và có phân biệt thứ tự các phần tử. vì có 6 cách chọn: . Để ý thấy rằng được tính là 2 cách chọn khác nhau vì chỉnh hợp có phân biệt thứ tự.
Công thức:
Lưu ý: còn được gọi là hoán vị (có bao nhiêu cách sắp xếp phần tử), có công thức là
Công thức chỉnh hợp lặp chập của :
Tổ hợp chập của là số cách chọn phần tử trong tập hợp phần tử không lặp và không phân biệt thứ tự.
Kí hiệu: hoặc hoặc
Ví dụ: cho tập hợp , vì có 3 cách chọn: . Để ý thấy rằng được tính là 1 cách chọn giống nhau vì tổ hợp không phân biệt thứ tự.
Công thức:
Một số tính chất:
Công thức tổ hợp lặp chập của :
Code theo công thức định nghĩa:
Tuy nhiên có thể thấy cách này khá tốn thời gian khi phải tính giai thừa nhiều lần, mỗi lần tính sẽ mất độ phức tạp , nếu có truy vấn phải tính lần thì sẽ mất .
Vì vậy, ta có thể preprocess trước một mảng lưu lại giai thừa của các số:
Như vậy chỉ cần mất để preprocess ban đầu, sau đó với mỗi truy vấn chỉ mất để tính, vậy tổng là .
Nhưng thật ra, chỉ cần khoảng từ 20 trở lên, ta đã có thể bị tràn số do giá trị của giai thừa là rất lớn. Vì thế, hầu hết các bài có tính tổ hợp đều cho mod với một số nào đó vì giá trị của tổ hợp có thể rất lớn. Để ý trong công thức có dấu chia, vì thế phải dùng tới nghịch đảo modular:
Và độ phức tạp vẫn là .
Ngoài ra, còn một cách tính dựa vào công thức: :
Lưu ý, ở đầu tiên trước các truy vấn phải fill full mảng C thành -1.
Nếu có truy vấn tính, đpt sẽ là .