• 亲密数


    亲密数

    需求分析

    本项目的关键是判断区间内的每一个数是否满足亲密数的定义。亲密数的定义是:如果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%
  • 相关阅读:
    OpenCV-C++ 图像上采样和降采样
    OpenCV-C++ 图像形态学操作应用-提取水平与垂直线
    OpenCV-C++ 图像形态学操作
    OpenCV-C++ 图像滤波(二)-中值滤波-双边滤波
    OpenCV-C++ 图像滤波(一)-均值滤波-高斯滤波
    OpenCV-C++ 绘制基本形状与编写文字
    OpenCV-C++ 调整图像亮度和对比度
    OpenCV-C++ 图像混合
    Mysql新建表,插入中文时报错“Incorrect string value: 'xE4xBDxA0xE5xA5xBD' for column”问题
    springcloud11 spring cloud config
  • 原文地址:https://www.cnblogs.com/20175317zrw/p/10923544.html
Copyright © 2020-2023  润新知