亲密数 2500年前数学大师毕达哥拉斯就发现,220与284两数之间存在着奇妙的联系: 220的真因数之和为:1+2+4+5+10+11+20+22+44+55+110=284 284的真因数之和为:1+2+4+71+142=220 毕达哥拉斯把这样的数对称为相亲数。相亲数,也称为亲密数,如果整数a的全部因子(包括1,不包括a本身)之和等于b, 且整数b的全部因子(包括1,不包括b本身)之和等于a,则将整数a和b称为亲密数。 从键盘任意输入一个整数n,编程计算并输出n以内的全部亲密数。 一对亲密数只输出一次, 小的在前。
程序运行示例1 Input n: 3000↙ (220,284) (1184,1210) (2620,2924)
程序运行示例2 Input n: 1000↙ (220,284)
#include<stdio.h> int factor(int);//定义函数 求因子之和 int main() { ?? ?int n, m,i,max,min,k=1; ?? ?printf("Input n:\n"); ?? ?scanf_s("%d", &n); ?? ?for (i = 100; i <= n; i++) ?? ?{ ?? ??? ?m = factor(i); ?? ??? ?if (factor(m) == i)? ?//防止重复输出两次 ?? ??? ??? ?k = k + 1;// ?? ??? ?if (factor(m) == i&&k%2!=0)// ?? ??? ?{ ?? ??? ? ?? ??? ??? ?if (i > m) ?? ??? ??? ?{ ?? ??? ??? ??? ?max = i; ?? ??? ??? ??? ?min = m; ?? ??? ??? ?} ?? ??? ??? ?else if(i<m) ?? ??? ??? ?{ ?? ??? ??? ??? ?max = m; ?? ??? ??? ??? ?min = i; ?? ??? ??? ?} ?? ??? ??? ?else ?? ??? ??? ?{ ?? ??? ??? ??? ?continue; ?? ??? ??? ?}
?? ??? ??? ?printf("(%d,%d)\n", min, max);?? ? ?? ??? ?} ?? ?} ?? ?return 0; } int factor(int i) { ?? ?int s,h,sum=0; ?? ?for (h = 1; h < i; h++) ?? ?{ ?? ??? ?s = i % h; ?? ??? ?if (s == 0) ?? ??? ??? ?sum = sum + h; ?? ?} ?? ?return sum; }
|