Để tính tổng các ước của [TEX]A[/TEX], ta có thể làm một vòng duyệt đơn giản từ [TEX]1[/TEX] đến [TEX]A[/TEX], kiểm tra xem nếu số [TEX]A[/TEX] chia hết thì cộng nó vào tổng [TEX]K[/TEX], rồi xét.
Code (C++):
Mã:
bool check_almost_perfect(int a)
{
int k = 0;
for (int i = 1; i <= a; i++)
if (a%i == 0) k += i;
return (2*a <= k);
}
Độ phức tạp: [TEX]O(N\cdot A)[/TEX], với [TEX]N[/TEX] là số lượng số cần nhập, và [TEX]A[/TEX] là số lớn nhất trong mảng đó.
Với giới hạn đề bài, số lượng phép tính tối đa cần thực hiện với method này là [TEX]10^{10}[/TEX], thành ra method này chưa tối ưu.