早教吧 育儿知识 作业答案 考试题库 百科 知识分享

:亲和数(AmicableNumber)某一天,tenshi看了一本趣味数学书,上面提到了亲和数tenshi看了数学书,提到亲和数:定义数对(x,y)为亲和数对且x、y各自的所有非自身正因子之和等于另一个数.例如(220

题目详情
:亲和数 ( Amicable Number ) 某一天,tenshi看了一本趣味数学书,上面提到了亲和数
tenshi看了数学书,提到亲和数:定义数对 (x,y) 为亲和数对且x、y各自的所有非自身正因子之和等于另一个数.例如 (220,284) 是亲和数对,220非自身正因子之和为 284,284非自身正因子之和220数对 (x,y ) 跟 (y,x) 被认为是同一数对,所以我们只考虑 x
▼优质解答
答案和解析
构造亲和数的公式:如果三个数: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