everycode icon indicating copy to clipboard operation
everycode copied to clipboard

2014年11月29日—0.0—30日 D6

Open nunnly opened this issue 10 years ago • 9 comments

/* 创建一个`divisors`函数
 * 根据传入参数,返回一个包含这个参数的所有除数的数组(1和本身除外)
 * param1 Number
 * return Array
 * e.g. 
 * divisors(12); //=> [2,3,4,6]
 * divisors(25); //=> [5]
 * divisors(13); //=> "13 is prime"
 */

function divisors(number){
    return array
}

nunnly avatar Nov 28 '14 02:11 nunnly

function divisors(num) {
    return (num ^ 1) ? new Array(num - 2).join("|").split("").reduce(function(arr) {
        return (arr.push(arr.length + 2), arr);
    }, []).reduce(function(res, n) {
        return (num % n) ? res : (res.push(n), res);
    }, []) : [];
}

感觉换汤不换药了,代码越来越没创造性了。

XadillaX avatar Nov 28 '14 02:11 XadillaX

 function divisors(num){
    var arr=[];
    for(var i=2;i<=parseInt(num/2);i++){
        if(num%i==0){
            arr.push(i);
        }
    }
    if(arr.length==0){return num+" is prime"}
    return arr;
 }

看楼上的代码,总是压力山大~~~@XadillaX 么么哒

nunnly avatar Nov 28 '14 02:11 nunnly

function divisors(number) {
    var results = [];
    for (var i = 2; i < number; i++) {
        (number % i === 0) && results.push(i);
    }

    return results.length ? results : number + ' is prime';
}


// 测试用例
divisors(12); //=> [2,3,4,6]
divisors(25); //=> [5]
divisors(13); //=> "13 is prime"

think2011 avatar Nov 28 '14 02:11 think2011

function divisors(num){
    var i = 2,arr = [];
    for(; i < num/2; i++){
        if(num % i == 0){
            arr.push(i);
        }
    }
    return arr.length>0 ? arr : num + ' is prime';
}

cpics avatar Nov 28 '14 02:11 cpics

function divisors_sqrt(num){
    var arr = [];
    for(var i = 2;i<=Math.sqrt(num);i++){
        if(num%i === 0){
            arr.push(i);
            arr.push(num/i);
        }
    }

    return arr;
}

没去去出重复

imfine1986 avatar Nov 28 '14 03:11 imfine1986

这不是明天和后天的题目么,你们太没时间观念。 我的最佳方案也就和@think2011一样。

yuersmall avatar Nov 28 '14 03:11 yuersmall

function divisors(number) {
            var array = [];
            for(var i=2;i<number;i++){
                number%i==0 && array.push(i);
            }
            if(array.length==0)
                return number+" is prime";
            return array
}

看到到@XadillaX代码赶脚要跪了~不过还是分享下自己的方案~

KevinCGH avatar Nov 28 '14 03:11 KevinCGH

结合网上找到的n个元素数组中取出m个元素重新弄的一份代码(测试得到 这种方式有问题)

var arr =[];
var result = [];

function divisors(num){
    prime(num);

    if(arr.length <=1){
        return num + " is prime";
    }else if(arr.length ===2){
        return arr;
    }else{
        getAllComb(arr);
        return result;
    }

}
//根据质因数对程序重新进行了修改
function prime(num){
//if(num/2 >0  && num%2 ===0 ){
    //    arr.push(2);
    //    prime(num/2);
    //    return;
    //}if(num/3 >0  && num%3 ===0 ){
    //    arr.push(3);
    //    prime(num/3);
    //    return;
    //}if(num/5 >0  && num%5 ===0 ){
    //    arr.push(5);
    //    prime(num/5);
    //    return;
    //}if(num/7 >0  && num%7 ===0 ){
    //    arr.push(7);
    //    prime(num/7);
    //    return;
    //}else if(num !== 1){
    //    arr.push(num);
    //    return;
    //}
    console.log(num);
    for (var i = 2; i < num; i++) {
        if(num%i === 0){
            arr.push(i);
            prime(num/i);
            //console.log(num/i)
            return;
        }

    }
    arr.push(num);
}

function getAllComb(myarr)
{
    var len=myarr.length;
    for(var i=1;i<=len-1;i++){
        getComb(myarr,len,i);
    }
}
/**
 * 从有n个元素的数组中取出m个元素
 * @param myarr
 * @param n
 * @param m
 * @param rs
 */
function getComb(myarr,n,m,rs)
{
    if(rs==null)
        rs = new Array();
    for(var i=n;i>=m;i--){
        rs[m-1]=myarr[i-1];      //取出第n个元素作为组合的第一个元素
        if(m>1)
            getComb(myarr,i-1,m-1,rs);  //递归,在n-1个元素中取m-1个元素,直到取出最后一个元素

        var comb = rs.reduce(function(v,k){
            return v*k;
        });

        if(!checkExist(result,comb))
            result.push(comb);
    }
}

function checkExist(myarr,e)
{
    for(var i=0;i<myarr.length;i++)
        if(e==myarr[i]) return true;
    return false;
}
//测试
console.log(divisors(12));
console.log(divisors(400000));

imfine1986 avatar Nov 28 '14 06:11 imfine1986

@XadillaX 大神看着好累啊

devjser avatar Dec 01 '14 02:12 devjser