【题目要求】
如果整数A的全部因子(包括1,包括A本身)之和等于B,并且整数B的全部因(包括1,不包括B本身)之和等于A,则称整数A和B为亲密数。求解3000以内的全部亲密数。
【方法1】
public class Ta{
public static void main(String[] args) {
for(int i=1;i<3000;i++){
for(int j=1;j<3000;j++){
if(i!=j){
if(fan(i,j)){
System.out.println("("+i+","+j+")");
}
}
}
}
}
public static boolean fan(int x,int y){
int s1=0;
int s2=0;
for(int i=1;i<x;i++){
if(x%i==0){
s1+=i;
}
}
for(int i=1;i<y;i++){
if(y%i==0){
s2+=i;
}
}
return s1==y&&s2==x?true:false;
}
}
【方法2】
public class Ta{
public static void main(String[] args){
int[] a=new int[3001];
for(int i=1;i<=3000;i++){
a[i]=factorSum(i);
}
for(int j=1;j<=3000;j++){
if(a[j]!=-1){
for(int k=j+1;k<=3000;k++){
if(friendly(a[j],a[k],j,k)){
System.out.println("("+j+","+k+")");
a[k]=-1;
}
}
}
}
}
public static int factorSum(int x){
int sum=0;
for(int i=1;i<x;i++){
if(x%i==0){
sum+=i;
}
}
return sum;
}
public static boolean friendly(int w,int x,int y,int z){
return w==z&&x==y?true:false;
}
}
【输出结果】