实例七:求出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;
}
运行结果:

心得:
二分查找实现求因子
本文介绍了一个C语言程序,用于找出1000以内的所有完全数,即那些等于其所有真因子之和的数。通过使用二分查找算法优化因子求解过程,提高了效率。
2596

被折叠的 条评论
为什么被折叠?



