一个数如果刚好与它所有的真因子之和相等,则称该数为一个“完数”,如:6=1+2+3,则6就是一个完数。求2到m之间有多少个完数(m的值由键盘输入)。
输入输出格式示例:
输入:500
输出:n=3
注释都已经打好了,应该能看懂吧!!!
先解释一下真因子是什么
真因子即真因数,真因数通常是对合数来说的,不包括这个数本身的因子就是真因数。
一个数的因数只有1和它本身,这个数叫质数;一个数除1和它本身外,还有其它的因数,这个数叫合数。
如6的因子有1、2、3、6,其中真因子是1、2、3。
#include<stdio.h>
int main()
{
int x,n=0;
int sum=0;
scanf("%d",&x);
for(int i=2;i<=x;i++){
int count=0;
for(int j=1;j<i;j++){//循环找出真因子
if(i%j==0){//如果j是真因子那么i%j是会等于0的
count+=j;//让每次找出的真因子相加
}
}
if(count==i){//判断真因子相加的结果等于这个数不,如果等于代表找到一个完数,则sum+1
sum++;
}
}
printf("n=%d",sum);
}