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


相关文章
|
弹性计算 运维 应用服务中间件
阿里云学生机(云翼计划)完全入手及课程学习指南
阿里云学生机(云翼计划)完全入手及课程学习指南
29473 1
|
6天前
|
Linux
电子好书发您分享《冬季实战营第二期:Linux操作系统实战入门》
电子好书发您分享《冬季实战营第二期:Linux操作系统实战入门》
35 1
|
6月前
|
Linux Shell 网络安全
从零开始:girlfriend靶机渗透攻略(下)
从零开始:girlfriend靶机渗透攻略
|
Web App开发 前端开发 JavaScript
计算机导论/计算机基础实验/网站建设技术:网页基本操作
计算机导论/计算机基础实验/网站建设技术:网页基本操作
104 0
计算机导论/计算机基础实验/网站建设技术:网页基本操作
|
消息中间件 安全 NoSQL
关于学生机的使用攻略和个人感想
学生机的使用攻略和个人感想
关于学生机的使用攻略和个人感想
|
小程序 安全 JavaScript
手把手教你搭建消防安全答题小程序-实现转发分享答题成绩功能
手把手教你搭建消防安全答题小程序-实现转发分享答题成绩功能
手把手教你搭建消防安全答题小程序-实现转发分享答题成绩功能
|
Java 关系型数据库 MySQL
阿里云学生机使用感想
阿里云学生机使用体验
|
Linux 开发工具
冬季实战营第二期:Linux操作系统实战入门学习报告
冬季实战营第二期:Linux操作系统实战入门
|
Linux 开发工具 数据安全/隐私保护
第二期Linux操作系统实战入门学习报告
linux基础知识 文本处理 系统状态检测 磁盘管理 文件目录管理
137 0
|
Linux
关于冬季实战营第二期:Linux操作系统实战入门的一些感想
关于冬季实战营第二期:Linux操作系统实战入门的一些感想
114 0