One Wan 2021-12-07 18:40 采纳率: 0%
浏览 143
已结题

如何求[a,b]之间的的多重完全数 ?

假如有两个数 a 、b ,1<=a<b<=1000000000
求 [a,b] 区间内的多重完全数

多重完全数是各因子之和能被这个数整除的数。
例 6 的 因子和 = 1 + 2 加 3 + 6 = 12
12能被6整除, 故 6 是 多重完全数 。

我自己尝试写了,不过普通方法时间超限。

我想知道 有没有好的方法实现。
重点在于 最大可以到10亿
难道用列举吗,但是 貌似又很难找到规律

  • 写回答

2条回答 默认 最新

  • One Wan 2021-12-07 20:22
    关注
    #include <stdio.h>
    
    void find_multiply_perfect_number(int a, int b) {
        int sum,i,j;
        for (i = a ; i <= b ; i++) {
            sum = 0 ;
            if (i % 2 ==0) {
                for (j = 1 ; j*j <= i ; j++) {
                    if (i%j == 0) {
                        sum += j;
                        if (j != i/j) {
                            sum += i/j ;
                        }
                    }
                }
                if (sum%i == 0){
                    printf("%d\n",i);
                }
            }
        }
    }
    
    
    int  main(void)
    {
          int a, b;
          scanf("%d%d", &a, &b);
          find_multiply_perfect_number(a, b);
          return 0;
    }
    
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月21日
  • 修改了问题 12月7日
  • 创建了问题 12月7日