江雪沉月


私信TA

用户名:971344847

访问量:298

签 名:

等  级
排  名 10878
经  验 1041
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 淮阴工学院
专  业

  自我简介:

TA的其他文章

解题思路:

参考了很多解法,很多复杂度比较高,提交的话时间会超时,思路都大同小异都是利用循环判断

要么的话就比较难懂,对初学者不是那么友好

下面是我看到的并且认为比较巧妙也比较好懂的一种解法
由题目可以很好理解亲密数的定义,那么我们假设A与B为一对亲密数,定义一个数的因数和为法则F

那么就可以得到关系式F(A)=B, F(B)=A

整理上式可以得到变形式:F(F(A))=A,  F(F(B))=B,可以利用这个关系式简化程序

参考代码:

#include<stdio.h>
int gcdcount(int n)         //定义一个计算因数和的函数,也就是上面说的法则F
{
    int count=1;               //累计求和,包括1不包括数本身
    for(int x=2;x<n;x++)  //利用循环判断是否为素数,不是素数则将其因数累加
    {
        if(n%x==0)           
            count+=x;
    }
    return count;               //返回值为因数之和
}
int main()
{
    for(int i=2;i<3000;i++)          //利用循环,寻找亲密数对
    {
            if(i==gcdcount(gcdcount(i))&&gcdcount(i)>i)       //F(F(A))=A,因此只要一个循环和一个变量即可,注意题目要求的输出顺序
            {
                    printf("(%d,%d)",i,gcdcount(i));                        //注意输出格式,小数在前,大数在后
            }
    }
    return 0;
}

 

0.0分

2 人评分

  评论区

简单易懂
2023-04-17 23:55:46
  • «
  • 1
  • »