32:完数个数
32 完数个数
作者: xxx时间限制: 1S章节: 循环
问题描述 :
完数的定义:如果一个大于1的正整数的所有真因子(不包括自己的那些因子)之和等于它的本身,则称这个数是完数,比如6,28都是完数:6=1+2+3;28=1+2+4+7+14。
本题的任务是判断两个正整数之间完数的个数。
输入说明 :
第一行是一个正整数n,表示测试实例的个数,然后就是n个测试实例,每个实例占一行,由两个正整数num1和num2组成,(1<num1,num2<10000)
输出说明 :
对于每组测试数据,请输出num1和num2之间(包括num1和num2)存在的完数个数。
输入范例 :
3
2 9999
4305 4135
5186 91
输出范例 :
4
0
1
代码:
···
include <stdio.h>
void conum(int st[],int n)
{
int sum = 0;
int top = -1;
for (int i = 1; i < n; i++)
{
for (int j = 1; j < i; j++)
{
if (i%j == 0)
{
sum += j;
}
}
if (sum == i)
{
top++;
st[top] = i;
}
sum = 0;
}
}
int main()
{
int n, num1, num2, num = 0;
int st[10] = { 0 };
conum(st,10000);
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d%d", &num1, &num2);
if (num1>num2)
{
int temp = num1;
num1 = num2;
num2 = temp;
}
for (int j = 0; j < 10; j++)
{
if (st[j] >= num1&&st[j] <= num2&&st[j] != 0)
{
num++;
}
}
printf("%d", num);
if (i < n - 1)
{
printf("\n");
}
num = 0;
}
return 0;
}
···