实例七:求出1000以内所有的“完全数(一个数等于出它本身以外所有因子之和)
问题描述:
编写一个程序,求出 1000 以内所有的完全数。(一个数如果恰好等于它除自身外的所有因子之和,则称该数为完全数。)如6 = 1 + 2 + 3。
#include <stdio.h>
#include <math.h>
int main(void)
{
int t, i, s, a = 2;
printf("1000以内有以下几个完全数:\n");
while(a < 1000)
{
s = 1;
i = 2;
t = (int)sqrt(a); //调用数学函数,关键是用二分法求因子
do
{
if(a % i == 0)
s += i + a / i; //s = s + i + a / i
i++;
}while(i < t);
if(t * t == a)
s += t;
if(s == a)
{
printf("%d=1",a);
for(i = 2;i < a;i++)
if(a % i == 0)
printf("+%d",i);
printf("\n");
}
a++;
}
return 0;
}
运行结果:
心得:
二分查找实现求因子