解题思路:
参考了很多解法,很多复杂度比较高,提交的话时间会超时,思路都大同小异都是利用循环判断
要么的话就比较难懂,对初学者不是那么友好
下面是我看到的并且认为比较巧妙也比较好懂的一种解法
由题目可以很好理解亲密数的定义,那么我们假设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 人评分
2^k进制数 (C++代码)使用递归方法浏览:736 |
永远的丰碑 (C语言代码)浏览:698 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:767 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:729 |
C语言训练-字符串正反连接 (C语言代码)浏览:664 |
分糖果 (C++代码)浏览:1537 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:781 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:790 |
【简单计算】 (C语言代码)浏览:642 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:702 |