求3000以内的全部亲密数

前言

如果整数A的全部因子(包括1,不包括A本身)之和等于B,且整数B的全部因子(包括1,不包括B本身)之和等于A,则称整数A\B是一对亲密数。求3000以内的全部亲密数。

思路

1.从哪开始

我们只有一个已知条件,A、B这两个数在3000以内,只能穷举,把一个具体的数代入A或者B。因为1的因子只有一个,是它本身,不能包括1的同时去掉本身,那我的循环应该从2开始,结束条件是小于3000。在循环次数已知的情况下,可以选用for循环解决这个问题。

 for (int i = 2; i <= 3000; i++) {
 }

2.要满足的条件

**(A的因子和)- A =(B的因子和 - B)**

3.提取方法

我们要求A、B的因子和,参数不能,返回数据类型相同,可以提取一个方法,求出A、B因子的和(不包括本身)

	/**
     * @param num
     * @return 因子的和(不包括本身)
     */
 public static int getDivisorSum(int num) {
		int sum = 0;
        for (int i = 1; i < num; i++) {//i!=num 求和时不带num本身 达到我们想要的效果
            if (num % i == 0) {
                sum += i;
            }
        }
        return sum;
 }

4.假设从A开始穷举

那么A=i,把A代入方法, 可以得到A的因子的和(不包括本身)。根据题目要求,这个数是应该等于B的,那么B=getDivisorSum(i)。因为i是具体数值,所以可以算出B的具体数值,再把B的值代入方法,同理是可以得到A的具体值的,A=getDivisorSum(aSum)。这时有两个具体的A值,只有这两个值相等,才是满足我们要求的。

5.代码

代码如下(示例):

public static void main(String[] args) {
        for (int i = 2; i <= 3000; i++) {
            int aSum = getDivisorSum(i);//整数A的全部因子(包括1,不包括A本身)之和  i即为A 得到的aSum即为B(aSum=B)
            int bSum = getDivisorSum(aSum);//将B代入方法得到整数B的全部因子(包括1,不包括B本身)之和,这个方法的返回值即为A B=aSum A=bSum A=i

            if (bSum == i && aSum < bSum) {//两个A的值相等,才是满足条件的结果 aSum < bSum 是为了去掉重复的值(如果这两个数可以相等,可以加上=)
                System.out.println("整数" + aSum + "\\" + bSum + "是一对亲密数");
            }
        }
    }

6.运行结果

在这里插入图片描述


总结

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值