编程读入两个正整数a,b,输出[a,b]区间内的所有亲和数对。亲和数对的含义是一对整数M和N,满足M的真约数之和等于N,同时N的真约数之和等于M。请一定注意输出样例的所示的数据范围。
两个正整数a,b(2<a<b<20000)。
输出[a,b]区间内的所有亲和数对,一对一行
2 10000
220,284
1184,1210
2620,2924
5020,5564
6232,6368
1200 5050
2620,2924
10000 20000
10744,10856
12285,14595
17296,18416
代码长度限制
16 KB
时间限制
3000 ms
内存限制
64 MB
C程序如下:
#include <stdio.h>
int sum(int a);//求这个数的所有真约数和
int main(void)
{
int x,y;
scanf("%d%d", &x, &y);//输入两个正整数
for(int i = x; i <= y; i++)
{
int t = sum(i);//定义一个变量t并让t等于i的真因数和
if(i < t && sum(t) == i && sum(i) <= y)//如果i小于i的所有真因数和&&i的真因数和的真因数和与i相等
{ //i及其真因数和都在[x,y]这个范围内,那么这两个数就是亲和数对。220的所有真因数和为248
printf("%d,%d\n", i, sum(i)); //248的所有真因数和为220
}
}
return 0;
}
int sum(int a)
{
int sum = 0;
for(int i = 1; 2 * i <= a; i++)//求这个数的所有真约数和,只需遍历这个数的一半
{
if(a % i == 0)
{
sum += i;
}
}
return sum;
}