Editorial for C++ Bài 3.B4: Số chính phương trong đoạn
Submitting an official solution before solving the problem yourself is a bannable offence.
Lời giải chi tiết:
Đầu tiên, các bạn cần khai báo kiểu dữ liệu của 2 số nguyên dựa vào khoảng giá trị đề bài đưa \(a, b (1 \leq a, b \leq 10^{9})\).
Bước 2, các bạn dùng lệnh cin
để nhập số vừa khai báo ở trên.
Bước 3, các bạn tính \(\sqrt{b}\) rồi làm tròn xuống để lấy phần nguyên.
Bước 4, các bạn tính \(\sqrt{a - 1}\) rồi làm tròn xuống để lấy phần nguyên.
Bước 5, Lấy kết quả bước 3 trừ đi kết quả bước 4, đây là kết quả bài toán.
Giải thích:
\[ \text{Số lượng số chính phương} = \lfloor \sqrt{b} \rfloor - \lfloor \sqrt{a-1} \rfloor \]
Khi bạn tăng giá trị \(a\) hoặc \(b\), số chính phương thường xuất hiện khi bạn vượt qua một bình phương của một số nguyên. Nhưng để tránh lặp lại, nếu \(a\) không phải là số chính phương, ta cần trừ đi 1 từ \(a\) để đảm bảo rằng ta không đếm số chính phương đó một lần nữa. Điều này giải thích tại sao là \(\sqrt{a - 1}\) trong công thức.
Ví dụ: Nếu \(a = 4\) và \(b = 10\), thì số lượng số chính phương trong đoạn từ 4 đến 10 là \(\lfloor \sqrt{10} \rfloor - \lfloor \sqrt{4} \rfloor\) \(= 3 - 1 = 2\). Các số chính phương là 4 và 9.
Comments