Số học (Thuật toán Euclid, Bao hàm - Loại trừ, Tổ hợp)

Bộ đề bài

# Bài tập Điểm Thời gian: Giới hạn bộ nhớ
1 Doraemon và cuộc phiêu lưu ở hòn đảo kho báu (Bản dễ) 50 (p) 1.0s 256M
2 Doraemon và cuộc phiêu lưu ở hòn đảo kho báu (Bản khó) 50 (p) 1.0s 256M
3 Bi xanh (THT TQ 2015) 100 (p) 1.0s 256M
4 Tiền tệ 100 (p) 1.0s 256M
5 #11 - Chia kẹo Euler 100 (p) 1.0s 256M
6 #11 - Chia kẹo Euler nhưng ai cũng có kẹo 100 (p) 1.0s 256M
7 Hệ số bậc k 100 (p) 1.0s 1G
8 Đếm số chia hết 100 (p) 3.0s 256M

1. Doraemon và cuộc phiêu lưu ở hòn đảo kho báu (Bản dễ)

Điểm: 50 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cảm thấy quá mệt mỏi với việc nghỉ dịch Covid-19 ở nhà, Doraemon rủ Nobita và những người bạn đi phiêu lưu ở hòn đảo kho báu ở Mỹ cách đây 1500 năm. Sau khi đến đảo, vì quá mệt mỏi sau chuyến hành trình dài, mọi người quyết định nghỉ chân một lúc. Tại đây, Doraemon chợt nhớ ra việc học hành bết bát của Nobita nên đã đố Nobita một câu hỏi để ôn lại các thuật toán khủng như Suffix Array, Treap, Palindrome Tree, etc…

Doraemon cho Nobita 1 chiếc hộp đặc biệt biết cứ bỏ \(M\) quả chuối vào chiếc hộp này thì tất cả quả chuối sẽ biến mất. Sau đó Doraemon cho Nobita 2 số \(L\) và \(R\) và bắt Nobita phải chọn 2 số \(i\) và \(j\) \((i < j)\) trong đoạn \(L\) và \(R\). Sau khi chọn Nobita sẽ có được tổng số chuối là \(i \times j\). Tiếp theo, cậu sẽ phải liên tục bỏ \(M\) quả chuối vào thùng đến khi số chuối còn lại ít hơn \(M\). Vì Nobita là 1 cậu bé “ngốc nghếch” nên cậu muốn biết được số lượng chuối còn lại ít nhất sau khi bỏ vào thùng.

Input

  • Một dòng duy nhất, gồm ba số lần lượt là \(L, R, M\) \((1 \leq L < R \leq 2000, 1 \leq M \leq 2000)\).

Output

  • Một dòng duy nhất, là kết quả của bài toán.

Scoring

  • Ở bản dễ, \(1 \leq L < R \leq 2000\).
  • Ở bản khó, \(1 \leq L < R \leq 10^9\).

Example

Test 1

Input
4 7 13 
Output
2
Note

Nếu chọn \(i = 4\) và \(j = 7\) thì số quả chuối còn lại là \((4 \times 7) - 2 \times 13 = 2\) quả.

2. Doraemon và cuộc phiêu lưu ở hòn đảo kho báu (Bản khó)

Điểm: 50 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cảm thấy quá mệt mỏi với việc nghỉ dịch Covid-19 ở nhà, Doraemon rủ Nobita và những người bạn đi phiêu lưu ở hòn đảo kho báu ở Mỹ cách đây 1500 năm. Sau khi đến đảo, vì quá mệt mỏi sau chuyến hành trình dài, mọi người quyết định nghỉ chân một lúc. Tại đây, Doraemon chợt nhớ ra việc học hành bết bát của Nobita nên đã đố Nobita một câu hỏi để ôn lại các thuật toán khủng như Suffix Array, Treap, Palindrome Tree, etc…

Doraemon cho Nobita 1 chiếc hộp đặc biệt biết cứ bỏ \(M\) quả chuối vào chiếc hộp này thì tất cả quả chuối sẽ biến mất. Sau đó Doraemon cho Nobita 2 số \(L\) và \(R\) và bắt Nobita phải chọn 2 số \(i\) và \(j\) \((i < j)\) trong đoạn \(L\) và \(R\). Sau khi chọn Nobita sẽ có được tổng số chuối là \(i \times j\). Tiếp theo, cậu sẽ phải liên tục bỏ \(M\) quả chuối vào thùng đến khi số chuối còn lại ít hơn \(M\). Vì Nobita là 1 cậu bé “ngốc nghếch” nên cậu muốn biết được số lượng chuối còn lại ít nhất sau khi bỏ vào thùng.

Input

  • Một dòng duy nhất, gồm ba số lần lượt là \(L, R, M\) \((1 \leq L < R \leq 10^9, 1 \leq M \leq 2000)\).

Output

  • Một dòng duy nhất, là kết quả của bài toán.

Scoring

  • Ở bản dễ, \(1 \leq L < R \leq 2000\).
  • Ở bản khó, \(1 \leq L < R \leq 10^9\).

Example

Test 1

Input
4 7 13 
Output
2
Note

Nếu chọn \(i = 4\) và \(j = 7\) thì số quả chuối còn lại là \((4 \times 7) - 2 \times 13 = 2\) quả.

3. Bi xanh (THT TQ 2015)

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Em nhận được một món quà từ ông tiên. Ông ban cho em hộp gồm vô hạn viên bi xanh. Tuy nhiên khi sử dụng bi để chơi trò chơi thì cần dùng đúng \(X\) viên bi xanh. Có 2 thao tác được sử dụng là:

  • Thao tác 1: Lấy \(A\) viên bi xanh từ trong hộp ra.
  • Thao tác 2: Bỏ \(B\) viên bi xanh từ ngoài vào hộp.

Yêu cầu duy nhất ông tiên đưa ra là em phải dùng ít thao tác nhất để lấy được đúng \(X\) viên bi xanh thì chiếc hộp sẽ thuộc về em mãi mãi.

Ví dụ em cần lấy ra 7 viên bi xanh (\(X = 7\)), \(A = 3, B = 8\) thì số thao tác ít nhất phải dùng là 6 trong đó dùng 5 lần thao tác 1, 1 lần thao tác 2.

Input

  • Gồm một dòng chứa 3 số nguyên dương \(A, B, X\) (\(A \le 10^{18}, B \le 10^{18}, X \le 10^{18}\)).

Output

  • Ghi ra một số nguyên dương duy nhất là tổng số thao tác ít nhất cần phải thực hiện. Nếu không có cách thực hiện để lấy được đúng \(X\) bi xanh thì đưa ra -1.

Example

Test 1

Input
3 8 7
Output
6

4. Tiền tệ

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Ông Lionheart - thị trưởng của Bilaspur, có một kế hoạch cho cư dân của mình. Ông ta muốn giới thiệu một hệ thống tiền tệ chỉ gồm 2 loại tiền mệnh giá \(a\) đồng và \(b\) đồng. Nhưng có một vấn đề rắc rối là có những khoản tiền không thể chi trả bằng cách chỉ sử dụng 2 loại tiền này. Trong những trường hợp đó, công dân sẽ phải chọn thanh toán kỹ thuật số.

Cho \(n\) khoản tiền, bạn hãy cho biết có bao nhiêu khoản tiền có thể thanh toán được bằng cách sử dụng các loại tiền trên và còn bao nhiêu khoản tiền phải được thanh toán bằng kỹ thuật số. Biết rằng thị trưởng đã cung cấp không giới hạn các loại tiền này.

Input

  • Dòng đầu tiên chứa 3 số nguyên \(n, a, b\) (\(1 \le n, a, b \le 10^5\)).
  • Dòng thứ hai chứa \(n\) số nguyên \(c_i\), mô tả \(n\) khoản tiền cần thanh toán (\(1 \le c_i \le 10^5\)).

Output

  • Ghi ra một dòng chứa 2 số nguyên tương ứng là số khoản tiền có thể thanh toán bằng 2 loại tiền mệnh giá \(a\) đồng, \(b\) đồng và số khoản tiền phải thanh toán bằng kỹ thuật số.

Scoring

  • Subtask \(1\) (\(30\%\) số điểm): \(1 \le n, a, b, c_i \le 10^2.\)
  • Subtask \(2\) (\(30\%\) số điểm): \(1 \le n, a, b, c_i \le 10^3.\)
  • Subtask \(3\) (\(40\%\) số điểm): Như ràng buộc gốc.

Example

Test 1

Input
5 4 6
16 20 36 22 15
Output
4 1
Note

Ví dụ 1. Có 4 khoản tiền thanh toán được bằng 2 loại tiền mệnh giá 4 đồng và 6 đồng là: 16, 20, 36, 22. Khoản tiền 15 không thanh toán được qua 2 loại tiền trên nên phải thanh toán bằng kỹ thuật số.

Test 2

Input
7 7 5
7 25 14 27 45 34 41
Output
7 0
Note

Ví dụ 2. Tất cả các khoản tiền đều thanh toán được qua 2 loại tiền mệnh giá 7 đồng và 5 đồng.

5. #11 - Chia kẹo Euler

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Có \(n\) chiếc kẹo, có bao nhiêu cách chia kẹo bất kỳ cho \(k\) bạn, mà có thể có bạn không nhận được kẹo?

Dữ liệu đầu vào

  • Gồm hai số \(n\) và \(k\) \((k \leq n)\)

Định dạng đầu ra

  • In ra đáp án chia lấy dư cho \(10^9+7\)

Điểm số

  • Subtask \(1\) (\(50\%\) số điểm): \(n \leq 20\)
  • Subtask \(2\) (\(25\%\) số điểm): \(n \leq 1000\)
  • Subtask \(3\) (\(25\%\) số điểm): \(n \leq 10^6\)

Ví dụ

Ví dụ 1

Đầu vào
5 3
Đầu ra
21

6. #11 - Chia kẹo Euler nhưng ai cũng có kẹo

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Có \(n\) chiếc kẹo, có bao nhiêu cách chia kẹo bất kỳ cho \(k\) bạn, mà bạn nào cũng được nhận kẹo?

Dữ liệu đầu vào

  • Gồm hai số \(n\) và \(k\) \((k \leq n)\)

Định dạng đầu ra

  • In ra đáp án chia lấy dư cho \(10^9+7\)

Điểm số

  • Subtask \(1\) (\(50\%\) số điểm): \(n \leq 20\)
  • Subtask \(2\) (\(25\%\) số điểm): \(n \leq 1000\)
  • Subtask \(3\) (\(25\%\) số điểm): \(n \leq 10^6\)

Ví dụ

Ví dụ 1

Đầu vào
5 3
Đầu ra
6

7. Hệ số bậc k

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 1G Input: calkexp.inp Output: calkexp.out

Xét biểu thức sau: \((x + a)^n\) (với \(a,n\) là số được cho).

Yêu cầu: Khai triển biểu thức trên, tính hệ số bậc \(k\)?

Input

  • Một dòng chứa ba số nguyên \(a,n,k\) (\(0 \le a \le 10^9; 1 \le n \le 2 \times 10^5; 0 \le k \le n\)).

Output

  • Một dòng chứa một số nguyên duy nhất là kết quả bài toán, do kết quả có thể rất lớn, bạn cần đưa ra kết quả chia lấy phần dư cho \(10^9+7\).

Scoring

  • Subtask \(1\) (\(25\%\) số điểm): \(a = 1, n \le 10\).
  • Subtask \(2\) (\(25\%\) số điểm): \(n \le 10\).
  • Subtask \(3\) (\(25\%\) số điểm): \(a = 1\).
  • Subtask \(4\) (\(25\%\) số điểm): không có ràng buộc gì thêm.

Example

Test 1
Input
1 2 1
Output
2

8. Đếm số chia hết

Điểm: 100 (p) Thời gian: 3.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cho \(n\) số tự nhiên \(a_1, a_2, ..., a_n\). Hãy xác định xem có bao nhiêu số \(x\) trong đoạn \([l, r]\) mà \(x\) không chia hết cho số \(a_i\) nào cả.

Input

  • Dòng đầu tiên chứa 3 số nguyên dương \(n, l, r \ (1 \leq n \leq 18)\)
  • Dòng thứ hai chứa \(n\) số nguyên dương \(a_1, a_2, ..., a_n \ (1 \leq a_i \leq 10^9)\)

Output

  • In ra một số nguyên là đáp số bài toán

Scoring

  • Subtask \(1\) (\(30\%\) số điểm): \(1 \leq l \leq r \leq 10^6\)
  • Subtask \(2\) (\(70\%\) số điểm): \(1 \leq l \leq r \leq 10^{18}\)

Example

Test 1

Input
3 10 20
3 4 5 
Output
5