日期:2014-05-16  浏览次数:20388 次

[算法问题2]
任意给定一个正整数,将其分解成质数相乘形式
15=3*5
24=2*2*2*3
17=1*17
等号左边为函数参数,右边为返回值
JS,JQ均可,给出思路得分少量,给出程序得分大量。

------解决方案--------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
function isS(num){
if(num<=2){
return num;
}
for(var i=2;i<num/2;i++){
if(num%i==0){
return 0;
}
}
return num;
}
function isS2(num){
if(isS(num)){
return "1*"+num;
}
var a=[];
var s=1;
var k=num;
for(var i=2;i<=k;i++){
if(isS(i)&&k%i==0){
a.push(i);
k=k/i;
i=1;
}
}
for(var i=0;i<a.length;i++){
s*=a[i];
}
if(s==num){
return a.join('*');
}else{
return "--";
}
}
alert(isS2(15));
alert(isS2(24));
alert(isS2(17));
alert(isS2(18));
</script>
</head>

<body>
</body>
</html>
用最笨的方法遍历试试
------解决方案--------------------
function getArray(num){
var arr = [];
while(num >=2){
for(var i=2;i<=num;i++){
if(num%i == 0){
arr.push(i);
num = num/i;
break;
}
}
}
return arr;
}


只是分解成质数的话,这样应该就可以了吧。

循环次数,就是左边那个数。

如果需要作出,所有可乘的组合,那就把返回的数组,进行组合就可以了

不过组合时,有重复的数字的时候,处理就有些麻烦了。
------解决方案--------------------
更正
function numSplit(num,result){
var splitUnit = [2,3,5,7];
var $a;
if(typeof result == 'undefined'){
result = []
}
if(($a = parseInt(num/splitUnit[0])) && ($a*splitUnit[0] == num)){
result.push(splitUnit[0]);
return numSplit($a,result);
}
if(($a = parseInt(num/splitUnit[1])) && ($a*splitUnit[1] == num)){
result.push(splitUnit[1]);
return numSplit($a,result);
}
if(($a = parseInt(num/splitUnit[2])) && ($a*splitUnit[2] == num)){
result.push(splitUnit[2]);
return numSplit($a,result);
}
if(($a = parseInt(num/splitUnit[3])) && ($a*splitUnit[3] == num)){
res