如果整数A的全部因子之和等于B,而B的全部因子之和等于A,则为亲密数。求3000以内的亲密数。

(1)应该事先求出1-3000所有数字的整数因子之和,存入一个数组,以提高效率

(2)由于亲密数配对是唯一的,所以如果一个元素在集合中都没有找到亲密数,那么任何一个其他的元素的亲密数也不可能是该元素了,所以其他元素在找亲密数时就不需要再考虑之前已经找过的数字。

源码如下:

#include <stdio.h>
   2:  
/*求a的因子和*/
   4: {
int i, sum = 0;
for(i = 1; i < a; i++)
/*i是a的一个因子*/
/*通过变量sum累加求和*/
/*返回a的因子的和*/
  10: }
  11:  
/*判断a,b是否是亲密数,是亲密数返回1,否则返回0*/
  13: {
return 1;
return 0;
  16: }
  17:  
/*寻找1-3000范围内的亲密数*/
  19: {
int i , j, x[3001];
for(i = 1; i <= 3000; i++)
  22:         x[i] = factorSum(i);
  23:         
for(i = 1; i <= 3000; i++)
  25:     {
if(x[i] != -111) {
for(j = i + 1; j <= 3000; j++)
if(isfriend(x[i], x[j], i, j))
  29:                 {
, i, j);
/*表示j已经找到亲密数*/
  32:                 }
  33:         }
  34:     }
  35: }
  36:  
int main()
  38: {
);
  40:     friendly();
return 0;
  42: }
  43:  

相关文章:

  • 2021-07-28
  • 2021-08-01
  • 2021-11-10
  • 2022-12-23
  • 2021-10-14
  • 2022-12-23
  • 2021-08-26
  • 2021-10-20
猜你喜欢
  • 2021-05-23
  • 2022-02-21
  • 2022-01-04
  • 2022-12-23
相关资源
相似解决方案