• 数学趣题——亲密数


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

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

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

    源码如下:

       1: #include <stdio.h>
       2:  
       3: int factorSum(int a)                /*求a的因子和*/
       4: {
       5:     int i, sum = 0;
       6:     for(i = 1; i < a; i++)
       7:         if(a % i == 0)              /*i是a的一个因子*/
       8:             sum = sum + i;        /*通过变量sum累加求和*/
       9:     return sum;                    /*返回a的因子的和*/
      10: }
      11:  
      12: int isfriend(int a, int b, int i, int j)     /*判断a,b是否是亲密数,是亲密数返回1,否则返回0*/
      13: {
      14:     if(a == j && b == i )return 1;
      15:     else return 0;
      16: }
      17:  
      18: void friendly()                        /*寻找1-3000范围内的亲密数*/
      19: {
      20:     int i , j, x[3001];
      21:     for(i = 1; i <= 3000; i++)
      22:         x[i] = factorSum(i);
      23:         
      24:     for(i = 1; i <= 3000; i++)
      25:     {
      26:         if(x[i] != -111) {
      27:             for(j = i + 1; j <= 3000; j++)
      28:                 if(isfriend(x[i], x[j], i, j))
      29:                 {
      30:                     printf("(%d,%d) ", i, j);
      31:                     x[j] = -111;                /*表示j已经找到亲密数*/
      32:                 }
      33:         }
      34:     }
      35: }
      36:  
      37: int main()
      38: {
      39:     printf("There are following friendly numbers from 1 to 3000\n");
      40:     friendly();
      41:     return 0;
      42: }
      43:  
  • 相关阅读:
    关于自适应屏幕方向和大小的一些经验
    在线升级Android应用程序完善版
    H263&H264&MPEG4
    PyCharm2019 激活
    VMware Workstation下载安装破解秘钥
    linux/kali安装及更新源以及输入法等配置
    python推倒式(列表、字典、集合)
    协程
    Flask中获取参数(路径,查询,请求体,请求头)
    Flask中获取参数(路径,查询,请求体,请求头)
  • 原文地址:https://www.cnblogs.com/steven_oyj/p/1744205.html
Copyright © 2020-2023  润新知