/*求1000之内所有“完数”,所谓的“完数”是指一个数恰好等于它的所有因子之和。例如,6是完数,因为6=1+2+3。要求输出形式为
6 its factors are 1,2,3 (注:C程序设计(第四版) 谭浩强/著 P141-9)*/
#include<stdio.h>
int main(){
int sum;//sum用来储存分解的因子和
for(int i=1;i<=1000;i++)//从1循环到1000
{
sum=0;//对sum进行初始化赋值。
//思考?为什么sum在此处赋值,而不是在 定义int sum时直接赋值?
//从1循环到i-1,寻找i的因子,如果j是i的因子,sum就自增j
for(int j=1;j<i;j++)
if(i%j==0) sum+=j;//for循环后只有一句循环语句,可以不用{},也可以加上{},if也是如此
if(sum==i)//如果i是完全数,则开始打印
{
printf("%d its factors are 1",i);//这句实际输出的是 “i(一个具体数)its factors are 1”
for(int m=2;m<i;m++) //for循环后只有一句循环语句,可以不用{},也可以加上{}
if(i%m==0) printf(",%d",m);//用循环打印i在2到i-1的因子
printf(" ");
}
}
return 0;
}
/*输出结果:
6 its factors are 1,2,3
28 its factors are 1,2,4,7,14
496 its factors are 1,2,4,8,16,31,62,124,248
Press any key to continue
28 its factors are 1,2,4,7,14
496 its factors are 1,2,4,8,16,31,62,124,248
Press any key to continue
*/