Tìm số hoàn hảo nhỏ hơn n

mọi người xem giúp e t tại sao khúc in đậm “sum” lại phải chia cho 2 vậy ạ?

#include<iostream>

using namespace std;

int main()
{
    long long  n,sum;
    cout << "Enter your number: "; cin >> n;
    for ( int number = 1;number  <= n;number++)
    {
        sum =0;
        for (int i = 1 ; i <= number;i++)
            if (number%i==0)
                sum+=i;
         ***if (sum/2.0 == number)***
            cout << number << endl;
    }
    return 0;
}

Đúng định nghĩa của nó.

Nếu 1 số n mà bằng tổng các ước khác chính nó thì n là số hoàn hảo.

Tức là

Nếu 1 số n mà bằng 1 nửa tổng các ước của nó thì n là số hoàn hảo.

sum là tổng các ước, do vậy sum = 2 * number. Ở đây đáng ra nên viết lại là sum = 2 * number thay vì chia 2.0 như trên.

3 Likes

vậy tại sao ở chương trình kiểm tra này không cần chia 2 mà vẫn kiểm tra đc số hoàn hảo vậy ạ?

#include<iostream>
using namespace std;
int main()
{
    int n,s=0;
    cin>>n;
    for (int i=1;i<n;i++)
    
        if (n%i==0) s+=i;
        if  (s==n) cout<<n<<" la so hoan hao";
}

Khác nhau ở <=< đấy.
Bài 1 là cộng cả chính nó vào nên phải /2. Chẳng khác gì cộng n vào rồi lại trừ n đi. Rảnh!
Bài 2 không cộng nên không cần /2. Tối ưu hơn!

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?