信奥赛一本通1154:亲和数

简介: 题目描述】自然数a的因子是指能整除a的所有自然数,但不含a本身。例如12的因子为:1,2,3,4,6。若自然数a的因子之和为b,而且b的因子之和又等于a,则称a,b为一对“亲和数” 。求最小的一对亲和数(a<>b)。【输入】(无)【输出】1行,分别为a和b(a<b)。【输入样例】(无)【输出样例】(无)

【题目描述】

自然数a的因子是指能整除a的所有自然数,但不含a本身。例如12的因子为:1,2,3,4,6。若自然数a的因子之和为b,而且b的因子之和又等于a,则称a,b为一对“亲和数” 。求最小的一对亲和数(a<>b)。

【输入】

(无)

【输出】

1行,分别为a和b(a<b)。

【输入样例】

(无)

【输出样例】

(无)

C++:
#include<iostream>
using namespace std;
int judge(int x);             //计算因子之和的函数
int main()
{
    for(int i=1;;i++)        //循环遍历直到找到为止
    {
        if(i==judge(judge(i))&&i!=judge(i))//如果a的因子之和的因子之和等于并且a的因子之和不等于a
        {                                   //这里信奥赛上的题目好像少说了a!=b这一条件
            cout<<i<<' '<<judge(i)<<endl;  //满足条件就输出并且结束遍历
            break;
        }
    }
    return 0;
}
int judge(int x)              
{
    int sum=0;
    for(int i=1;i<x;i++)        //遍历计算能被x整除的数之和
        if(x%i==0)
            sum+=i;
    return sum;                  //返回总和
}
C语言:

这里我用C语言写的代码用了两个函数,一个函数是用来判断是否满足题目条件的,另一个函数是用来计算一个数所有因子的和的

#include<stdio.h>
bool judge(int x);    //用来判断是否满足条件的函数
int total(int x);     //用来计算一个数所有因子之和的函数
int main()
{
    int i=1; 
    while(i)         //从1开始循环遍历判断
    { 
        if(judge(i))
        {
            printf("%d %d",i,total(i));  //满足条件的话输出该对亲和数(即该数和该数的所有因子之和)
            break;
        }
        i++;    
    }    
}
bool judge(int x) 
{
    int sum=0;             //表示该数所有因子之和
    int b=0;               //表示该数的所有因子之和的因子之和
    for(int i=1;i<x;i++)       
    {
        if(x%i==0)         //能整除i的就是该数的因子
            sum+=i;
    }
    for(int i=1;i<sum;i++)   //再次计算因子之和
    {                         
        if(sum%i==0)          //不过这次是计算上个数因子之和的因子之和
            b+=i;
    }
    if(b==x && sum!=x)     //该数的因子之和的因子之和等于本身而且该数的因子之和不等于本身时就返回真
        return true;    
    else
        return false;       //否则为假
}
int total(int x)      //同上
{
    int sum=0;                  
    for(int i=1;i<x;i++)
    {
        if(x%i==0)
            sum+=i;
    }
    return sum;
}


相关文章
|
网络协议 安全 容灾
【华为HCIP | 高级网络工程师】刷题日记(2)
【华为HCIP | 高级网络工程师】刷题日记(2)
1352 0
|
存储 网络协议 算法
【华为HCIP | 高级网络工程师】刷题日记(3)
【华为HCIP | 高级网络工程师】刷题日记(3)
883 0
|
监控 网络协议 网络虚拟化
【华为HCIP | 高级网络工程师】刷题日记(6)
【华为HCIP | 高级网络工程师】刷题日记(6)
485 0
|
开发框架 网络协议 网络安全
【华为HCIP | 高级网络工程师】刷题日记(10)
【华为HCIP | 高级网络工程师】刷题日记(10)
492 0
|
10月前
|
机器学习/深度学习 存储 测试技术
华为机考真题
华为机考真题
125 0
|
存储 运维 网络协议
【华为HCIP | 高级网络工程师】刷题日记(1)
【华为HCIP | 高级网络工程师】刷题日记(1)
1025 2
|
网络协议 安全 网络安全
【华为HCIP | 高级网络工程师】刷题日记(9)
【华为HCIP | 高级网络工程师】刷题日记(9)
777 0
|
运维 监控 网络协议
【华为HCIP | 高级网络工程师】刷题日记(11)
【华为HCIP | 高级网络工程师】刷题日记(11)
608 1
|
网络协议 安全 网络安全
【华为HCIP | 高级网络工程师】刷题日记(7)
【华为HCIP | 高级网络工程师】刷题日记(7)
571 0
|
网络协议 安全 网络安全
【华为HCIP | 高级网络工程师】刷题日记(4)
【华为HCIP | 高级网络工程师】刷题日记(4)
698 0