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