相親數問題

2021-08-17 03:13:53 字數 1342 閱讀 6813

相親數(amicable pair),又稱親和數、友愛數、友好數,指兩個正整數中,彼此的全部約數之和(本身除外)與另一方相等。畢達哥拉斯曾說:「朋友是你靈魂的倩影,要像220與284一樣親密。」

例如220與284:

220的全部因數(除掉本身)相加是:1+2+4+5+10+11+20+22+44+55+110=284

284的全部因數(除掉本身)相加的和是:1+2+4+71+142=220

親和數中可輕易推出,一方的全部約數之和與另一方的全部約數之和相等。(此敘述不可逆,不能用來判斷是否為親和數)

220的全部約數之和是:1+2+4+5+10+11+20+22+44+55+110+220 = 284+220 = 504

284的全部約數之和是:1+2+4+71+142+284 = 220+284 = 504

–來自維基百科

問題:求3000以內的相親數

該問題的關鍵在於求數m的所有約數的和。

簡單方法:

我們可以判斷每乙個數是否為m的約數:

#include 

#include

const int maxn=30000+3;

intsum[maxn];

//計算m除本身外全部約數之和

int sumnum(int m)

}return n;

}int main()

for(int i=2;i<=30000;i++)

}return

0;}

該方法的時間複雜度比較高。

實際計算 m 的所有約數,只需要計算m−

−√m

次即可

例如:

100

1 * 100

2 * 50

4 * 25

5 * 20

10 * 10

sum[100] =1+2+50+4+25+5+20+10

除了平方以外不會有重複出現

完整程式

#include 

#include

const int maxn=30000+3;

intsum[maxn];

//計算m除本身外全部約數之和

int sumnum(int m)

}//如果m為平方數,則其開方只能使用一次

if(i*i==m)

return n;

}int main()

for(int i=2;i<=30000;i++)

}return

0;}

相親的意義

如果你想結婚,你一定要和相親認識的物件結婚。因為只有你的相親的物件是適合與你結婚的。你不要一定要和不是相親認識的物件結婚。因為如果你和不是相親認識的物件結婚,你的婚姻就會是悲劇或不會 幸福。我知道每個男性都想和白富美結婚,每個 女性都想和高富帥結婚,但大多數以上的相親的物件不是白富美,不是高富帥。如...

男女相親if迴圈

man age int input 請輸入男生年紀 man height int input 請輸入男生身高 man weight int input 請輸入男生體重 man income int input 請輸入男生收入 woman age int input 請輸入女生年齡 woman hei...

經典相親對話

一女初次見面相親,剛坐定,女方首先提問。女 你有房有車嗎?要是 沒有,那我們就別往下談 了吧。男 我有房有車,但你是 嗎?女 男 就算我沒房沒車,將來也會有的,但如果你現 在不是 你將來會是 嗎?女 我過去是。男 如果我過去有房有車 現在生意受挫賠掉了,你願意陪我共渡時艱 東 山再起嗎?女 你現在沒...