C语言解决完数难题
题目描述
小明正在进行期末数学考试,现在他遇到了这样一个题:如果一个大于 1 的正整数的所有因子之和等于它的本身,则称这个数是完数,比如 6,28 都是完数:6=1+2+3;28=1+2+4+7+14。请判断两个正整数之间完数的个数。小明想请聪明的你帮帮他。
输入输出格式
输入格式
输入包含两个正整数 n1 和 n2 ,表示题目描述中的数据范围。
正整数之间以空格间隔。
输出格式
针对输入,请打印出 n1 和 n2 之间(包括边界)存在的完数个数。
输入输出样例1
输入
2 5
输出
0
输入输出样例2
输入
5 7
输出
1
说明提示
1<n1,n2<10000
/*
数学题,如何判断一个数是否为完数,从1到该数的一半,遍历取,然后判断该数是否可以将其整除,
可以的话将这些除数求和,判断是否等于该数,等于的话则该数为完数,否则不是。
*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
int m,n,count,t,j,x,sum;
scanf("%d%d",&m,&n);
count=0;
if(m>n)
{ //应该是输入小和大的两个数,如果顺序相反则调换两数
t=m;
m=n;
n=t;
}
for(j=m; j<=n; j++)
{ //遍历给定范围,判断是否为完数s
sum=0;
for(x=1; x<=j/2; x++)
{ //从1到该数一半开始循环判断
if(j%x==0) sum+=x; //可以整除,累积求和
}
if(sum==j) count++; //和等于j,则该数为完数,计数+1
}
printf("%d\n",count); //打印结果
return 0;
}
- 点赞
- 收藏
- 关注作者
评论(0)