解题思路:
定义一个规模为3000的数组,将数组的第[A的因数和]赋值为A。这样当遍历到B时,如果数组的第[B]项的值和B的因数和相等,就有n[A的因数和](A)==n[B](B的因数和)且A的因数和==B。
核心思想:将A存入数组中以A因数和为下标所在项,遍历到B时,若B的因数和刚好是以B为下标所在项的值,则说明B的因数和为A,同时因为A将自己存入其因数和对应的下标,故B就是A的因数和。
注意事项:
注意因数和不要溢出
参考代码:
#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分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复