谜题 0003
最大质因数
Project Euler · 第 3 题
难点并不只是原始速度,而是每次发现因数后,都立即把剩余的数缩小。
提示
每次打开一个继续除以每个小因数,直到它不再整除剩余值。
循环结束时,剩下的数本身可能就是质数。
解答
认真尝试后再打开完全除去每个因数
只要
ts
function largestPrimeFactor(value: number): number {
let n = value
let largest = 1
for (let divisor = 2; divisor * divisor <= n; divisor += divisor === 2 ? 1 : 2) {
while (n % divisor === 0) {
largest = divisor
n /= divisor
}
}
return n > 1 ? n : largest
}对题目中的数,结果为
不断变化的循环上界很重要:每次除法都会减小