假如有两个数 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;
}