1. 程式人生 > >輸出1到某個整數範圍中所有的完數

輸出1到某個整數範圍中所有的完數

定義一個數 n,要求輸出1~n 之間的所有的完數。

Sample Input:100

                             5000

Sample Output:100:6 28

                                5000:6 28 496

所謂“完數”是指一個數恰好等於它的所有不同因子之和。例如,6是完數,因為6=1+2+3。而24不是完數,因為24≠1+2+3+4+6+8+12=36。

思路:先判斷一個正整數的因子,若是因子,則求和,再將所求得的和與該正整數作比較,相等則是完數;

下面是用C++寫的程式,這裡用到了vector容器來存放輸入的數,用迭代器輸出。

完整程式碼:

#include 
#include 
#include 
#include 

using namespace std;

int main()
{
    int n;
    int sum;
    int a[100];
    int j = 0;
    vector v1;

    while(cin >> n)
    {
        v1.push_back(n);
    }

    for(vector::iterator it=v1.begin(); it!=v1.end(); it++)
    {
        cout << *it << ": ";
        for(int m = 1; m <= *it; m++)   //遍歷輸入的數 n 之前所有的數
        {
            sum = 0;
            
            //判斷是否為因子
            for(int i=1; i<=m/2; i++) 
            {
                if(m % i == 0)
                {
                    sum = sum + i;  //是該數的因子,則求和
                }
            }
            
            //判斷是否是完數
            if(sum == m)  
            {
                cout << m << " ";
            }
        }
        cout << endl;
    }
    
    return 0;
}