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(" ");
}
num = 0;
}
return 0;
}
···

Yesterday is history,tomorrow ismystery,but today is a gift!That why it is called Present!
原文地址:https://www.cnblogs.com/VictorierJwr/p/12408706.html