程式基本演算法習題解析 如果有兩個數,每一個數的所有約數(除它本身以外)的和正好等於另一個數,則稱這兩個數為互滿數。求出3000以內所有的互滿數並輸出。
阿新 • • 發佈:2018-12-18
題目:
如果有兩個數,每一個數的所有約數(除它本身以外)的和正好等於另一個數,則稱這兩個數為互滿數。求出3000以內所有的互滿數並輸出。
先附上程式碼:
// Chapter1_8.cpp : Defines the entry point for the application. // 如果有兩個數,每一個數的所有約數(除它本身以外)的和正好等於另一個數,則稱這兩個數為互滿數。 // 求出3000以內所有的互滿數並輸出。 #include "stdafx.h" #include<iostream> using namespace std; int main() { int i,j,sum=1,sum2=1; //賦初值為1是因為每個正整數都有1這個約數 for(i=3;i<3000;i++) { for(j=2;j<i;j++) { //求約數和 if(i%j==0) { sum += i/j; } } //計算約數和的約數和 for(j=2;j<sum;j++) { if(sum%j==0) { sum2 += sum/j; } } //如果一個數的所有約數和正好等於另一個數 if(i>sum && i==sum2) //剔除掉兩數相等以及一組資料僅次序不同而出現兩次的情況 cout << i << " , " << sum << endl; //重新賦初值 sum = 1; sum2 = 1; } system("pause"); return 0; }
執行結果如下:
值得注意的是這行程式碼:
if(i>sum && i==sum2) //剔除掉兩數相等以及一組資料僅次序不同而出現兩次的情況
其中的 i>sum 判斷語句很重要,如果沒有這個限制,那麼就會出現如下情況:
即會出現列印兩數相等以及一組資料僅次序不同而出現兩次的情況。