信奥赛一本通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;
}


相关文章
|
缓存 负载均衡 网络协议
网工常用网络命令合集✨(建议收藏)
网工常用网络命令合集✨(建议收藏)
2235 1
网工常用网络命令合集✨(建议收藏)
|
12月前
|
存储 传感器 监控
自考-计算机网络原理-第一章总结
自考-计算机网络原理-第一章总结
97 0
|
8月前
|
运维 网络协议 数据中心
终于有网易大牛把我在大学没学会的《计算机网络协议》讲清楚了
如果你了解过IT行业,那么你一定听说过计算机网络。不管是从事开发、运维、测试,都需要有一个良好的计算机网络基础知识体系。
|
9月前
|
网络协议 网络架构
网安基础知识—【IP地址】
本文介绍了什么是IP地址,IP地址的分类以及什么是子网掩码。
104 0
|
9月前
|
存储 程序员 数据库
关于 IP 属地的一些科普
关于 IP 属地的一些科普
|
11月前
|
网络协议 应用服务中间件 Linux
硬核图解!断网了,还能ping通 127.0.0.1 吗?为什么?
硬核图解!断网了,还能ping通 127.0.0.1 吗?为什么?
156 0
硬核图解!断网了,还能ping通 127.0.0.1 吗?为什么?
|
C语言 C++
信奥赛一本通2036:【例5.3】开关门
题目描述】 宾馆里有n(2≤n≤1000)个房间,从1∼n编了号。第一个服务员把所有的房间门都打开了,第二个服务员把所有编号是2的倍数的房间“相反处理”,第三个服务员把所有编号是3的倍数的房间作“相反处理”…,以后每个服务员都是如此。当第n个服务员来过后,哪几扇门是打开的。(所谓“相反处理”是:原来开着的门关上,原来关上的门打开。) 【输入】 房间数n。 【输出】 一行,由小到大的打开门的房间序号,各序号之间用一个空格隔开。
511 0
|
C++
信奥赛一本通2037:【例5.4】约瑟夫问题
题目描述】 N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人开始报数,数到M的人出圈;…输出依次出圈的人的编号。 【输入】 输入N和M。 【输出】 输出一行,依次出圈的人的编号。 【输入样例】
353 0
|
C语言 C++
信奥赛一本通2039:【例5.6】冒泡排序
【题目描述】 编程输入n(1≤n≤20)个小于1000非负整数,然后自动按从大到小的顺序输出。(冒泡排序) 【输入】 第一行,数的个数n; 第二行,n个非负整数。 【输出】 由大到小的n个非负整数,每个数占一行。 【输入样例】 5 2 5 8 6 12
352 0
|
网络架构
常见的网络端口(软考网工知识点总结)
常见的网络端口(软考网工知识点总结)
409 0