Editorial for C++ Bài 3.D1: Số hoàn hảo
Submitting an official solution before solving the problem yourself is a bannable offence.
Lời giải chi tiết:
Trước khi triển khai thuật toán, các bạn nhập vào số lượng testcase đầu vào, sử dụng vòng while
để đọc hết các testcase. \(T (1 \leq T \leq 100)\) . Khai báo ba biến a, b, và i
. a
là số cần kiểm tra, b
sẽ được sử dụng để tính tổng các ước của a
, và i
là biến đếm được sử dụng trong vòng lặp.
Đầu tiên, các bạn cần khai báo kiểu dữ liệu của các số nguyên dựa vào khoảng giá trị đề bài đưa \(n (1 \leq n \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, sử dụng vòng lặp từ i = 1
đến khi i*i
lớn hơn hoặc bằng a
:
- Kiểm tra xem
i
có phải là ước củaa
không. Nếu đúng, thì cộngi
vàa/i
vào biếnb
. Điều này tính tổng của các ước củaa
.
Bước 4, kiểm tra xem i*i
có bằng a
và i
có phải là ước của a
không. Nếu đúng, thì cộng i
vào biến b
. Điều này đảm bảo rằng nếu a
là một số hoàn hảo bình phương, thì i
không bị đếm hai lần.
Bước 5, kiểm tra xem tổng các ước của a
có bằng gấp đôi của a
không. Nếu đúng, in ra "YES"
, ngược lại in ra "NO"
.
Comments