输出n以内的所有亲密数

题目描述:

如果自然数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             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                 sumDivB=1;             //sumDivB是b的因子之和
                for(int i=2;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

 

 

 

你可能感兴趣的:(Java练习)