求一個數的約數和
阿新 • • 發佈:2021-06-11
給你一個數,讓你求這個數的所有約數和,6的約數為1,2,3,6。1+2+3+6=12。輸出12
c++程式碼實現從小到大輸出這些約數,並且計算約數和
#include <iostream> #include <algorithm> #include <vector> using std::cin; using std::cout; using std::endl; using std::sort; using std::vector; int main(){ int N,sum=0; cin >> N; vector<int> ords; for (int i = 1; i * i <= N; i++) { if (N % i == 0) { ords.push_back(i); if (i * i != N) ords.push_back(N / i); } } sort(ords.begin(), ords.end()); cout << ords.size(); for (int i = 0; i < ords.size(); i++){ cout << ' ' << ords[i]; sum+=ords[i]; } cout<<"約數和sum = "<< sum << endl; return 0; }
可以把計算約數、輸出、求和都分別封裝成函式。
#include <iostream> #include <algorithm> #include <vector> using std::cin; using std::cout; using std::endl; using std::sort; using std::vector; vector<int> CalculationDivisor(int N) { vector<int> ords; for (int i = 1; i * i <= N; i++) { if (N % i == 0) { ords.push_back(i); if (i * i != N) ords.push_back(N / i); } } sort(ords.begin(), ords.end()); return ords; } void OutputEveryDivisor(vector<int> ords) { cout << "約數個數為: " << ords.size() << endl; for (int i = 0; i < ords.size(); i++) { cout << ' ' << ords[i]; } cout << endl; } int CalculationSumOfDivisor(vector<int> ords) { int sum = 0; for (int i = 0; i < ords.size(); i++) { sum += ords[i]; } return sum; } int main(){ int N,sum=0; cin >> N; vector<int> ords; ords = CalculationDivisor(N); OutputEveryDivisor(ords); sum = CalculationSumOfDivisor(ords); cout<<"約數和:sum = "<< sum << endl; return 0; }
問題可以擴充套件到求判斷一個數是否是完美數。
完美數 說明:
如果有一數n ,其真因數 (不包括它本身 ) 的總和等於n , 則稱之為完美數(Perfect Number ),例如以下幾個數都是完美數:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248
在求和時不加最後一個因子(它本身)就可以了。
判斷一個數是不是完美數連結求完美數