亲密数
Posted 20175317zrw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了亲密数相关的知识,希望对你有一定的参考价值。
亲密数
需求分析
本项目的关键是判断区间内的每一个数是否满足亲密数的定义。亲密数的定义是:如果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% |
以上是关于亲密数的主要内容,如果未能解决你的问题,请参考以下文章