相亲数
维库,知识与思想的自由文库
|
“朋友是你灵魂的倩影,要像220与284一样亲密。”
——毕达哥拉斯 相亲数(Amicable Pair),又称亲和数、友愛數,指兩個正整數中,彼此的全部约数之和(本身除外)与另一方相等。 例如220与284:
[编辑] 举例
[编辑] 历史
[编辑] 尋找方法[编辑] 歐拉法則對於正整數m,n,m < n,a = 2m(2n − m + 1) − 1,b = 2n(2n − m − 1) − 1,c = 2n + m(2n − m + 1)2 − 1。若a,b,c均為質數,則 [编辑] 塔別脫·本·科拉法則這是歐拉法則m = n − 1的特殊情況:第n個塔別脫·本·科拉數 [编辑] 一段列出亲和数和完全数的java程序
public class love_num {
public static void main(String[] args)
{
int intMain = 2;
int intBig = 0;
try
{
intBig = Integer.parseInt(args[0].toString());
}
catch (Exception e)
{
System.out.println("error:" + e);
System.out.println("type command like \"java love_num 50\"");
return;
}
while (true)
{
ArrayList listYakuSu1 = findYakuSu(intMain);
int intSum1 = addYakuSu(listYakuSu1);
//String strDebug = "";
//String strDebug2 = "";
if ( intSum1 == intMain )
{
System.out.println("self num:" + intSum1);
//for (int i = 0; i < listYakuSu1.size(); i ++)
//{
// strDebug += listYakuSu1.get(i);
// strDebug += ",";
//}
//System.out.println("YakuSu:" + strDebug);
}
else
{
ArrayList listYakuSu2 = findYakuSu(intSum1);
int intSum2 = addYakuSu(listYakuSu2);
if ( intSum2 == intMain )
{
System.out.println("love num:" + intMain + "--" + intSum1);
//for (int i = 0; i < listYakuSu1.size(); i ++)
//{
// strDebug += listYakuSu1.get(i);
// strDebug += ",";
//}
//System.out.println("YakuSu:" + strDebug);
//for (int i = 0; i < listYakuSu2.size(); i ++)
//{
// strDebug2 += listYakuSu2.get(i);
// strDebug2 += ",";
//}
//System.out.println("YakuSu:" + strDebug2);
}
}
intMain ++;
if (intMain > intBig)
{
return;
}
}
}
public static int addYakuSu (ArrayList listYakuSu)
{
//System.out.println("addYakuSu start ");
int sum = 0;
int temp = 0;
for (int i = 0; i < listYakuSu.size() ; i ++ )
{
temp = Integer.parseInt(listYakuSu.get(i).toString());
sum += temp;
}
//System.out.println("addYakuSu end " + sum);
//System.out.println("");
return (sum);
}
public static ArrayList findYakuSu (int intNum)
{
//String strDebug = "";
//System.out.println("findYakuSu start " + intNum);
ArrayList listYakuSu = new ArrayList();
double dbNum = (double)intNum;
double dbRoot = Math.sqrt(dbNum);
Double d = new Double(dbRoot);
int intRoot = d.intValue() ;
//System.out.println("root:" + intRoot);
// if (intHalf * 2 == intNum)
// {
// }
// else
// {
// intHalf ++;
// }
listYakuSu.add ("1");
for (int i = 2; i <= intRoot ; i ++)
{
int intPart = intNum/i;
if (intPart * i == intNum)
{
if (intPart == i)
{
listYakuSu.add (Integer.toString(i));
//strDebug += Integer.toString(i);
//strDebug += ",";
}
else
{
listYakuSu.add (Integer.toString(i));
listYakuSu.add (Integer.toString(intPart));
//strDebug += Integer.toString(i);
//strDebug += ",";
//strDebug += Integer.toString(intPart);
//strDebug += ",";
}
}
}
//System.out.println("findYakuSu end:1," + strDebug);
//System.out.println("");
return (listYakuSu);
}
} [编辑] 参看[编辑] 外部鏈接 |

和
是相親數。這個法則能找出符合親和數的數對
。若
均為質數,則
是相親數。
