问题
亲密数:如果整数A的全部因子( 包括1, 不包括A本身 )之和等于B;且整数B的全部因子( 包括1,不包括B ) 之和等于A,则A和B称为亲密数。求 3000以内的全部亲密数
分析
穷举。 我们知道一个数可能的第二大因子是其一半。穷举过程可以使用这一限制降低循环次数。
解决方案
1: /** 2: * @file 026.c 3: * @author Chaolong Zhang <emacsun@163.com> 4: * @date Sun May 26 16:43:14 2013 5: * 6: * @brief 7: * 8: * 9: */ 10: 11: #include <stdio.h> 12: 13: int main(int argc, char *argv[]) 14: { 15: int a,i,b,n; 16: 17: printf ("the friend numbers bellow 4000 are\n"); 18: 19: for (a=1; a <= 4000; ++a) 20: { 21: for (b=0,i=1; i <= a/2; ++i) 22: if (!(a%i)) b+=i; 23: for (n=0,i=1; i <= b/2; ++i) 24: if (!(b%i)) n+=i; 25: if (n==a && a<b) 26: printf ("%d is friend with %d\n", a,b); 27: } 28: return 0; 29: } 30:
最终结果
220 is friend with 284 1184 is friend with 1210 2620 is friend with 2924