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


目录
打赏
0
0
0
0
19
分享
相关文章
gitee 创建代码仓库,并提交本地代码
gitee 创建代码仓库,并提交本地代码
391 6
高精度算法(加、减、乘、除,使用c++实现)
高精度算法(加、减、乘、除,使用c++实现)
1874 0
高精度算法(加、减、乘、除,使用c++实现)
C++中的科学计数法
C++中的科学计数法
2030 0
【C++ 20 信号量 】C++ 线程同步新特性 C++ 20 std::counting_semaphore 信号量的用法 控制对共享资源的并发访问
【C++ 20 信号量 】C++ 线程同步新特性 C++ 20 std::counting_semaphore 信号量的用法 控制对共享资源的并发访问
319 0
阿里云服务器地域节点测速IP延迟ping值测试(国内+海外)
最近很多站长咨询我哪个节点云服务器最快?阿里云服务器支持哪些节点?阿里云服务器地域节点测试IP及各个地域节点Ping值延迟测速,本文分享的是OSS动态解析的IP,测试仅供参考,包括阿里云国内大陆地域和海外地域 阿里云建站干货分享:减少阿里云产品购买成本指南注意:本文仅供参考,实际精准信息请以阿里云...
信奥赛一本通1150:求正整数2和n之间的完全数
题目描述】 求正整数2和n之间的完全数(一行一个数)。 完全数:因子之和等于它本身的自然数,如 6=1+2+3 【输入】 输入n(n≤5000)。 【输出】 一行一个数,按由小到大的顺序。 【输入样例】 7 【输出样例】
767 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问