解题思路:
定义一个规模为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分
2 人评分
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1072 |
C语言程序设计教程(第三版)课后习题8.2 (C语言代码)浏览:5275 |
WU-拆分位数 (C++代码)浏览:819 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:616 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:702 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:537 |
1124题解浏览:630 |
字符串比较 (C语言代码)浏览:770 |
C语言程序设计教程(第三版)课后习题9.1 (C语言代码)浏览:653 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:1260 |