Raven


私信TA

用户名:zzRaven

访问量:1481

签 名:

等  级
排  名 15685
经  验 831
参赛次数 0
文章发表 7
年  龄 0
在职情况 学生
学  校 sgu
专  业

  自我简介:

解题思路:
定义一个规模为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分

2 人评分

  评论区

这样会多出来一组数哎
2022-05-20 10:23:32
  • «
  • 1
  • »