题目描述
小明正在进行期末数学考试,现在他遇到了这样一个题:如果一个大于 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
代码:
#include<stdio.h>
int main(){
int n1,n2,s,count=0,m,i; //s表示所有因子之和,count表示所求完数的个数
scanf("%d%d",&n1,&n2);
for(i=n1;i<=n2;i++) //外层循环就是让程序遍历 输入的两数之间的数
{
s=0; //内层循环就是从1开始遍历看外层循环进来的数是否为完数
for(m=1;m<=i/2;m++)
{
if(i%m==0) //能除尽说明m是这个数(即此时的i)的因子
s=s+m; //因子相加
}
if(s==i) //因子相加和等于这个数本身 这数为完数,count加1
count++;
}
printf("%d",count);
return 0;
}