运用c语言输出100以内所有的完全数
2022-12-05 广告
#include<stdio.h>
int main()
{
int x, i, sum;
for (x = 3; x <= 1000; x++)
{
sum = 1; //初始化sum
for (i = 2; i <= x/2 ; i++) //从2开始,1不是完数
{
if (x%i == 0)sum +=i;
}
if (sum == x)printf("%d its factors are 1 ", x);//找到完数,感觉是为了“,”处理方便,所以在这里的末尾加了1
if (sum == x)
{
for (i = 2; i <= x / 2; i++)
{
if (x% i == 0)printf(",%d ", i);//找到完数的因子
}
printf("\n");
}
}
return 0;
}
扩展资料:
如果一个数恰好等于它的因子之和,则称该数为“完全数”。
第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。
第二个完全数是28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。
第三个完全数是496,有约数1、2、4、8、16、31、62、124、248、496,除去其本身496外,其余9个数相加,1+2+4+8+16+31+62+124+248=496。后面的完全数还有8128、33550336等等。
参考资料:百度百科-完全数
#include<stdio.h>
int perfectNum(int);
int main()
{
int count=0;
int k[50]={0};
for(int i=1;i<=100;i++)
{
if(perfectNum(i) != -1)
{
k[count] = perfectNum(i);
count++;
}
}
printf("100以内的完全数有%d个,分别如下:\n", count);
for(i=0;i<count;i++)
{
printf("%d\t", k[i]);
}
printf("\n");
return 0;
}
int perfectNum(int n)
{
int i,j,cnt=0,sum=0;
int a[20]={0};
for(i=1;i<n;i++)
{
if(n%i==0)
{
a[cnt]=i;
cnt++;
}
}
for(j=0;j<cnt;j++)
{
sum += a[j];
}
if(sum == n)
return n;
else
return -1;
}
int main()
{
int i,n;
for (n=1;n<=100;n++)
{
for (int sum=0;i=1;i<=n/2;i++)
{
if (n%i==0)
sum+=i;
}
if (sum==n)
printf("%d\t",n);
}
}
100以内的完全数只有1+2+3=6 ,1+2+4+7+14=28两个数,你试试行不行。