一.引入例题:
亲密数_3 2500年前数学大师毕达哥拉斯就发现,220与284两数之间存在着奇妙的联系: 220的真因数之和为:1+2+4+5+10+11+20+22+44+55+110=284 284的真因数之和为:1+2+4+71+142=220 毕达哥拉斯把这样的数对称为相亲数。相亲数,也称为亲密数,如果整数A的全部因子(包括1,不包括A本身)之和等于B,且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。 编程计算并输出3000以内的全部亲密数。(一对亲密数只输出一次, 小的在前。)
二.解题
都是基于多重循环,但是一个计算量大,一个较小。
头文件:#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
1.
这个循环计算的是i从1开始,每一个比i小的j都要,计算一次真因数之和(i=20,那么就要计算j=1~19的数),i是每个数出现一次,j是要出现很多次,导致越到后面计算的量越大。
输出案例:
2.优化算法:
大大减少了重复冗杂的计算,使程序快速运行。
输出案例:
3.同第二种方法一样的思想,是在已知一个数的真因数之和的情况下,利用这个真因数之和来计算他的真因数之和。
程序实现如下:
执行如下:
三.总结
二者都能实现,但第一种重复计算过多,第二,三种更巧妙的利用了题设条件,使程序快速运行。