构造亲和数的公式:如果三个数:p=3*2^(n-1)-1,q=6*2^n-1,r=9*2^(2n-1)-1都是素数,且p,q>2,则2^npq和2^nr就是一对亲和数。例如,取n=2,得p=5,q=11,r=71,则2^2*5*11=220和2^2*71=284是一对亲和数。
计算亲和数的JAVA程序
importjava.util.ArrayList; import java.lang.Math; import java.lang.Double;
public classlove_num {
public static voidmain(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("typecommand like \"java love_num 50\"");
return;
}
while (true)
{
ArrayListlistYakuSu1 = findYakuSu(intMain);
int intSum1 =addYakuSu(listYakuSu1);
//String strDebug ="";
//String strDebug2= "";
if ( intSum1 ==intMain )
{
System.out.println("selfnum:" + intSum1);
//for (int i = 0; i< listYakuSu1.size(); i ++)
//{
// strDebug +=listYakuSu1.get(i);
// strDebug +=",";
//}
//System.out.println("YakuSu:"+ strDebug);
}
else
{
ArrayListlistYakuSu2 = findYakuSu(intSum1);
int intSum2 =addYakuSu(listYakuSu2);
if ( intSum2 ==intMain )
{
System.out.println("lovenum:" + 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 intaddYakuSu (ArrayList listYakuSu)
{
//System.out.println("addYakuSustart ");
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("addYakuSuend " + sum);
//System.out.println("");
return (sum);
}
public staticArrayList findYakuSu (int intNum)
{
//String strDebug ="";
//System.out.println("findYakuSustart " + intNum);
ArrayListlistYakuSu = new ArrayList();
double dbNum =(double)intNum;
double dbRoot =Math.sqrt(dbNum);
Double d = newDouble(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("findYakuSuend:1," + strDebug);
//System.out.println("");
return(listYakuSu);
}
}