亲和数对

2023-12-15 19:38:25
任务描述

编程读入两个正整数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;
}

文章来源:https://blog.csdn.net/2302_80325489/article/details/135023464
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。