<!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>
用最笨的方法遍历试试

解决方案 »

  1.   

    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;
    }只是分解成质数的话,这样应该就可以了吧。循环次数,就是左边那个数。如果需要作出,所有可乘的组合,那就把返回的数组,进行组合就可以了不过组合时,有重复的数字的时候,处理就有些麻烦了。
      

  2.   

    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)){
    result.push(splitUnit[3]);
    return numSplit($a,result);
    }

    if(result.length == 0){
    return '1 * ' +num;
    }else{
    return result.join('*');
    }


    }var $a = numSplit(15);
      

  3.   

    更正
    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)){
    result.push(splitUnit[3]);
    return numSplit($a,result);
    }

    if(result.length == 0){
    return '1 * ' +num;
    }else{
    return result.join('*');
    }


    }var $a = numSplit(24);
      

  4.   


    function gtno(n)
    {
    var za = [2];
    gtr: for(var i=3; i<=n/2; i+=2)
    {
    for(var r=2; r<i/2; r++)
    if(i%r==0)
    continue gtr;
    za.push(i);
    }
    var arr = [];
    function def(s)
    {
    var i=0,sb;
    while((sb=za[i++]) && s%sb!=0);
    if(sb)
    {
    arr.push(sb);
    def(s/sb);
    }
    }
    def(n);
    return arr.length==0?"1*"+n:arr.join("*");
    }
    alert(gtno(15));
    alert(gtno(24));
    alert(gtno(17));
    alert(gtno(442));
      

  5.   

    function resolve(n){
        var l = n,arr=[];
        while(l>1){
            for(var i= 2;i<=l;i++){
                if(l % i ==0){
                    arr.push(i);
                    l /= i;
                    break;
                }
            }
        }
        return n+"="+(arr.length==1?"1*":"")+arr.join("*");
    }
    给的数必须大于1.