# NODK tác giả : Nguyễn Minh Thiên - THPT chuyên Hà Tĩnh ## Tóm tắt đề : Hãy tính tổng các số không chia hết cho $k$ trong khoảng từ $L$ đến $R$ ## Subtask - subtask 1 : $L \leq R \leq 10^6$, $k \leq 10^9$ - Subtask 2 : $L \leq R \leq 10^9$, $k \leq 10^9$ ## Subtask 1 : $L \leq R \leq 10^6$, $k \leq 10^9$ ### Thuật toán: 1. Duyệt tất cả các số từ $L$ đến $R$. 2. Với mỗi số kiểm tra xem số đó có chia hết cho số $k$ không. Nếu không tăng tổng lên. --- ### Code C++: ```cpp int L, R, k; cin >> L >> R >> k; long long sum = 0; for(int i = L; i <= R; i++) { if (i % k != 0) { sum += i; } } cout << sum; ``` --- ## Subtask 2 : $L \leq R \leq 10^9$, $k \leq 10^9$ ### Thuật toán: để tính tổng các số không chia hết cho $k$ trong khoảng từ $L$ đến $R$ ta chỉ cần tính tổng các số trong khoảng $[L; R]$ rồi trừ cho tổng các số chia hết cho $k$ trong khoảng $[L; R]$ --- ### Code C++: ```cpp long long L, R, k; cin >> L >> R >> k; long long sum = (R - L + 1) * (L + R) / 2; long long l = ((L + k - 1) / k) * k; long long r = (R / k) * k; if (l > r) { cout << sum; } else { long long sumk = ((r - l) / k + 1) * (l + r) / 2; cout << sum - sumk; } ``` ---