Description:
从小到大输出两个正整数m和n(m≥6,n≤5000)之间的亲密数对。说明:若a和b为一对亲密数,则a的因子和等于b,b的因子和等于a,且a不等于b。例如,220与284是一对亲密数。一个数的因子,即能被它整除的数,包含1,不包含它本身。
Input:
m n
Output:
按照从小到大的次序每行输出一对亲密数
Sample Input:
100 2000
Sample Output:
220 284
1184 1210
解题思路:
方法1、使用数组和循环把m,n之间的数的因子存起来,即a[i]+=j;然后再用两个循环加if判定亲密数。
方法2、先写出一个求因子的函数,然后再调用。
完整代码:
1、
#include <stdio.h> void main() { int i,j,m,n,a[10000]; scanf("%d%d",&m,&n); for(i=m;i<=n;i++) { a[i]=0; for(j=1;j<=i/2;j++) { if(i%j==0) a[i]+=j; } } for(i=m;i<=n;i++) { for(j=i+1;j<=n;j++) { if(a[i]==j && a[j]==i) { printf("%d %d\n",i,j); } } } }
2、
#include <stdio.h> int qinmi(int n) { int i,sum=0; for(i=1;i<=n/2;i++) { if(n%i==0) sum+=i; } return sum; } void main() { int m,n,a,b,t; scanf("%d%d",&m,&n); for(a=m;a<=n;a++) { b=qinmi(a); t=qinmi(b); if(b>a && a==t) printf("%d %d\n",a,b); } }