Điểm:
300
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
Bình luận
Để làm đc bài này, chúng ta cần đọc qua định lý bao hàm loại trừ link mình để ở đây
. Như vậy chúng ta sẽ tính số số chia hết cho bất kì số nào trong mảng a[] r trừ đi là xong.
Số số cần tìm sẽ = res. Gọi Ki là số số thuộc [l,r] chia hết cho bội chung nn của i số bất kì trong
a[], như vậy theo định lý ta sẽ có res= K1 - K2 + K3 - K4 + K5 - K6 +...
ta sẽ sort các số trong mảng a[] để tiện cho việc giảm độ phức tạp khi đệ quy
sử dụng vector x(1e7,1) để tạo bội chung nhỏ nhất tại vị trí đệ quy x[i]
Ta sẽ đệ quy như sau:
void loading(ll i, ll choice)
{
// ta khởi đầu với i=1 và choice=0 thể hiện chọn lần 1 và duyệt qua n phần tử
}
tứk quá, làm ra rồi còn mỗi cái xử lý số lớn để ko bị sai nữa mà loay hoay mãi:)
=))
Mình ngồi quay lui này :V
sao ai cũng làm bitmask vậy :<