相亲数
维基百科,自由的百科全书
“朋友是你灵魂的倩影,要像220与284一样亲密。”
——毕达哥拉斯
——毕达哥拉斯
相亲数(Amicable Pair),又称亲和数、友愛數、友好數,指兩個正整數中,彼此的全部约数之和(本身除外)与另一方相等。
例如220与284:
- 220的全部约数(除掉本身)相加是:1+2+4+5+10+11+20+22+44+55+110=284
- 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
目录 |
历史 [编辑]
- 320年左右,古希腊毕达哥拉斯发现的220与284,是人类认识的第一对相亲数.
- 约850年,阿拉伯数学家塔別脫·本·科拉就發現了相亲数公式,後來稱為塔別脫·本·科拉法則。
- 1636年,費馬发现了另一对相亲数:17296和18416。
- 1638年,笛卡儿也发现了一对相亲数:9363584和9437056。
- 欧拉也研究过相亲数这个课题。1750年,他一口气向公众抛出了60对相亲数:2620和2924,5020和5564,6232和 6368,……,从而引起了轰动。
- 1866年,年方16岁的意大利青年巴格尼发现1184与1210是仅仅比220与284稍为大一些的第二对相亲数。
- 目前,人们已找到了1200多对相亲数。但相亲数是否有无穷多对,相亲数的两个数是否都是或同是奇数,或同是偶数,而没有一奇一偶等,这些问题还有待继续探索。
尋找方法 [编辑]
歐拉法則 [编辑]
對於正整數
,
,
,
,
。若
均為質數,則
和
是相親數。這個法則能找出符合親和數的數對
,但
時沒有其他符合的數對。
塔別脫·本·科拉法則 [编辑]
這是歐拉法則
的特殊情況:第
個塔別脫·本·科拉數
。若
、
和
均為質數,則
和
是相親數。
一段列出亲和数和完全数的Java程序 [编辑]
import java.util.ArrayList; import java.util.List; public class love_num { public static void main(String[] args) { int intMain = 2; int intBig = 0; try { intBig = Integer.parseInt(args[0]); } catch (Exception e) { System.out.println("error:" + e); System.out.println("type command like \"java love_num 50\""); return; } do { List<Integer> listYakuSu1 = findYakuSu(intMain); int intSum1 = addYakuSu(listYakuSu1); if ( intSum1 == intMain ) { System.out.println("self num:" + intSum1); } else { List<Integer> listYakuSu2 = findYakuSu(intSum1); int intSum2 = addYakuSu(listYakuSu2); if ( intSum2 == intMain ) { System.out.println("love num:" + intMain + "--" + intSum1); } } intMain ++; } while (intMain <= intBig) } public static int addYakuSu (List<Integer> listYakuSu) { int sum = 0; for (int i : listYakuSu) { sum += i; } return sum; } public static List<Integer> findYakuSu (int intNum) { List<Integer> listYakuSu = new ArrayList<Integer>(); listYakuSu.add (1); int intRoot = (int)Math.sqrt(intNum); for (int i = 2; i <= intRoot ; i++) { int intPart = intNum/i; if (intPart * i == intNum) { listYakuSu.add (i); if (intPart != i) { listYakuSu.add (intPart); } } } return listYakuSu; } }
参看 [编辑]
|
||||||||||||||||||||||