[求助]两个程序,弄了一个下午都弄不出
1:求1~1000中的亲密数对。2:返回1~100间所有非质数的质因子。(例如:50=2*5*5)。
/**
*求出1000以内所有亲密数的算法
*亲密数的定义:如果a的因子和等于b,b的因子和等于a,且a!=b,则称a,b互为亲密数
*注意,其中的因子包含1但不包含本身
*@author :[url=http://eastsun.javaeye.com] Eastsun[/url]
*/
public class FriendNumber{
public static int sumOfFactor(int n){
int sum =0;
for(int i =1;i<n;i++) if(n%i==0) sum +=i;
return sum;
}
public static void main(String[] args){
for(int n =1;n<=1000;n++){
int sum =sumOfFactor(n);
if(n !=sum &&n ==sumOfFactor(sum)) System.out.println(\"亲密数 :\"+n+\",\"+sum);
}
}
}
第二题的解法:
/**
*因数分解算法
*@author :[url=http://eastsun.javaeye.com]Eastsun[/url]
*/
import java.util.*;
public class Factor{
public static List<Integer> factor(int n){
List<Integer> list =new LinkedList<Integer>();
if(n<=1) return list;
int m =2;
while(n!=1)
if(n%m==0){
n /=m;
list.add(m);
}
else m++;
return list;
}
public static void main(String[] args){
for(int n=1;n<=100;n++){
List<Integer> list =factor(n);
if(list.size()<=1) continue;
Iterator<Integer> iter =list.iterator();
System.out.print(\"\n\" +n +\" =\"+iter.next());
while(iter.hasNext()) System.out.print(\"*\"+iter.next());
}
}
}
[此贴子已经被作者于2007-4-8 13:21:58编辑过]