问题 G: 零基础学C/C++167——判断是否完数
题目描述
编写一个判断一个数是否是完数的函数,用main()函数调用。并求n—m以内的完数有哪些?
一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3(6的因子是1,2,3)。
输入
输入为多组测试数据。
输入n和m( 1 <= n <=m <=10000)
输出
输出n到m之间的所有完数,两个完数之间用一个空格隔开
样例输入 Copy
2 8
样例输出 Copy
6
题解
完数优化的话只用从2查找到n/2+1就行(简单优化);
自定义函数比较方便理解;
代码(AC)
点击查看代码
#include <stdio.h>
int ws(int x)
{ int sum=0;
for(int i=1;i<x;i++)
{
if(x%i==0) sum+=i;
}
if(sum==x) return 1; //异常退出为真
else return 0; //正常退出为假
}
int main ()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=n;i<=m;i++)
{
int flag=0;
if(ws(i)!=0)//ws(i)为真
{
if(flag!=0) printf(" ");//if(flag)意为flag为真
printf("%d",i);
flag=1;
}
if(i==m) printf("\n");
}
return 0;
}