js-5进制转换和质数因子

343 阅读1分钟

1.进制转换 www.nowcoder.com/practice/8f…

var line
while(line=readline()){
    console.log(parseInt(line,16))
}

2.质数因子 www.nowcoder.com/practice/19…

解法1:

var line,arr=[]
while(line=readline()){
    line = parseInt(line)
    for(let i = 2;i<=Math.sqrt(line);){
        if(line%i==0){
            line/=i
            arr.push(i)
        }else{
            i++
        }
    }
    arr.push(line)
    console.log(arr.join(' '))
}

解法2:

var line,arr=[]
while(line=readline()){
    line = parseInt(line)
    for(let i = 2;i<=line/2;){
        if(line%i==0){
            line/=i
            arr.push(i)
        }else{
            i++
        }
    }
    arr.push(line)
    console.log(arr.join(' '))
}

这个题的难点在于时间复杂度。解法1优于解法2.
下面是我最刚开始的解法(卡在了运行时间上)

var line,arr=[]
while(line=readline()){
    line = parseInt(line)
    let i =2
    while(i<=line){
        if(line%i==0){
            line=line/i
            arr.push(i)
        }else{
            i++
        }    
    }
    arr.sort((a,b)=>a-b)
    console.log(arr.join(' '))
}

这个解法是卡在了这个例子上:

8612f1d20d9a175631e0b81fa37b568.png

运行时间超出预期时间了。

image.png

通过测算的解法1和解法2是对循环的条件进行了优化。记住以下一个结论:
该正整数的所有质因数都一定会小于平方根。