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

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

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

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

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

#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;
}
#include <stdio.h>
#include <math.h>
int main()
{
    int a.b,k,i,j,sum=0;
    scanf("%d%d",&a,&b);
    for(j=a;j<=b;j++)
    {
    sum = 0;
    k = sqrt(j)+0.5;
    for(i=1;i<=k;i++)
    {
        if(j%i==0)
        {
              sum += i;
             if(i != j-i)
                sum += j-i;
        }
    }
    if(sum%j==0)
          printf("%d\n",j);
    }  
    return 0;
}