码迷,mamicode.com
首页 > 其他好文 > 详细

亲密数

时间:2019-05-26 22:26:40      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:百度百科   code   核心   重置   等于   image   images   参考   title   

亲密数

需求分析

本项目的关键是判断区间内的每一个数是否满足亲密数的定义。亲密数的定义是:如果a的所有正因子和等于b,b的所有正因子和等于a,因子包括1但不包括本身,且a不等于b,则称a,b为亲密数对(参考百度百科对亲密数的解释)

功能设计

  • 基本功能:查找、判断并输出亲密数
  • 扩展功能:输入一个区间的两个端点,判断该区间内是否存在亲密数,根据判断输出相应的结果

设计实现

首先定义两个变量a,b,存储用户输入的区间头和尾,之后使用for循环遍历区间,逐个判断其真因子和是否等于它本身,如果不相等继续判断其真因子和的真因子和是否等于它本身,如果有的话输出该数和他的真因子和,同时计数变量count的值加一,最后判断计数变量count的值是否等于初值,如果相等说明区间内未找到亲密数,输出提示“该区间内没有亲密数”。

测试运行

正常情况

技术图片

异常情况

技术图片

核心代码

        for (int i=a;i<=b ;i++) {   //遍历a到b
            for(int j=1;j<i;j++){   //遍历比该数小的正整数
                if(i%j==0) {        //如果j是i的因子
                    total1 = total1 + j;  //total1是在循环外定义的,初值为0,用于计算真因子和
                }
            }
            if(total1!=i){      //如果真因子和不等于它本身
                for(int k=1;k<total1;k++){   //遍历1到total1
                    if(total1%k==0) {        //如果k是total1的因子
                        total2 = total2 + k;  //total2是在循环外定义的,初值为0,用于计算total1的真因子和
                    }
                }
                if(total2==i &&  i<total1){    //如果i的所有正因子和等于total1,total1的所有正因子和等于
                    System.out.println(i+"和"+total1+"是一对亲密数");
                    count++;
                }
            }
            total1=0;      //重置total1
            total2=0;      //重置total2
        }

总结

这个项目与完全数的求解大致过程较为相似,所以我直接使用了完全数的模板,修改了其中的核心部分代码。此过程我节省了大量时间,这启示我在实现项目的同时要多动脑子,这样可以少走许多弯路。

PSP

步骤 耗时(min) 百分比
需求分析 15 33.3%
设计 5 11.1%
代码实现 5 11.1%
测试 5 11.1%
分析总结 15 33.3%

亲密数

标签:百度百科   code   核心   重置   等于   image   images   参考   title   

原文地址:https://www.cnblogs.com/20175317zrw/p/10923544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!