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); } }