解题思路:
定义一个规模为3000的数组,将数组的第[A的因数和]赋值为A。这样当遍历到B时,如果数组的第[B]项的值和B的因数和相等,就有n[A的因数和](A)==n[B](B的因数和)且A的因数和==B。

核心思想:将A存入数组中以A因数和为下标所在项,遍历到B时,若B的因数和刚好是以B为下标所在项的值,则说明B的因数和为A,同时因为A将自己存入其因数和对应的下标,故B就是A的因数和。


WechatIMG329.jpeg



注意事项:
注意因数和不要溢出
参考代码:

#include

int n[3000];

int main()

{

    for(int i=1;i<=3000;i++)

    {

        int s=0;

        for(int j=1;j<=i/2+1;j++)//计算因数和

        {

            if(i%j==0)s+=j;

        }

        if(n[i]==s)printf("(%d,%d)",s,i);//B的因数和为第B项的值(也就是A)时输出

        else if(s<=3000)n[s]=i;//防止溢出,且将A的因数和赋值于数组

    }

return 0;

}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

111 2年前 回复TA
这样会多出来一组数哎