题目描述:
如果自然数m的所有因子(包括1但不包括自身)之和为n,而n的所有因子之和为m,则称m与n是一对“亲密数”,例如220的所有因子之和为1+2+4+5+10+11+20+22+44+55+110=284。而284的所有因子之和为1+2+4+71+142=220,听此220与284是一对亲密数。输出每对亲密数是,小数在前,大数在后,并去掉重复的对数。
代码如下:
import java.util.Scanner;
public class haha {
public static void main(String[] args) {
Scanner scn=new Scanner(System.in);
System.out.println("请输入求几以内的亲密数?");
int n=scn.nextInt();
int a,b,count=0,sumDivB=0;
for(a=1;a<n;a++){ //亲密数一:a ,先确定第一个n以内的数;
b=1; //b代表a的因子之和
for(int i=2;i<=Math.sqrt(a);i++){
if(a%i==0){ //因子在根号a的范围内
b=b+i+a/i;//i和a/i都是a的因子
}
}
if(a<b){ //保证只输出a<b;
sumDivB=1; //sumDivB是b的因子之和
for(int i=2;i<Math.sqrt(b);i++){
if(b%i==0){
sumDivB=sumDivB+i+b/i;
}
}
}
if(a==sumDivB){ //判断是否相等
System.out.println(a+"和"+b+"是一对亲密数");
count++;
}
}
System.out.println("共有亲密数个数:"+count);
}
}
运行结果:
请输入求几以内的亲密数?
2000
220和284是一对亲密数
1184和1210是一对亲密数
共有亲密数个数:2