---
# System prepended metadata

title: NODK

---

# 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;
}
```

---