|
//这个例子演示如何 运用递归来完成分解质因数
import java.util.List;
import java.util.ArrayList;
/**
* 分解质因数
*/
public class GetFactor{
public static void main(String[] args){
List< Long> factors=getFactors(5555566666L,2);
List< Long> f=getFactors(18,2);
System.out.println(factors);
System.out.println(f);
System.out.println(test(188888));
System.out.println(test(18));
}
/**
* 通过递归实现分解质因数
*
* @param n 要分解的数字
* @param factor起始因子
*
* @return 分解结果
*/
private static List< Long> getFactors(long n,long factor){
//不断增大factor直到能整除n
while(n%factor!=0&&factor< n){
//得到2,3,5,7,9,11,13,...
factor=factor< 2?2:factor==2?3:factor+2;
}
List< Long> result;
if(factor>=n){//因子已经涨到和n一样大,说明n本身就是因子。这时递归完成
result=new ArrayList< Long>();
}else{//因子能够整除n,于是继续分解除以因子后的结果
result=getFactors(n/factor,factor);//向下递归
}
result.add(factor);
return result;
}
//分解质因数
public static String test(int n){
StringBuffer str=new StringBuffer();
str.append(n+ "= ");
if(n <=3){
str.append(n);
return str.toString();
}
for(int i=2;i <=n/2;i++){
if(n%i==0){
str.append(i+ "* ");
n=n/i;
i=1;
}
}
str.append(n);
return
str.toString();
}
}
运行:
C:\test>java GetFactor
[19231, 271, 41, 13, 2]
[3, 3, 2]
188888= 2* 2* 2* 7* 3373
18= 2* 3* 3 |
|