質數又稱素數。一個大於1的自然數,除了1和它自身外,不能被其他自然數整除的數叫做質數;否則稱為合數。 質因數(素因數或質因數)在數論里是指能整除給定正整數的質數。除了1以外,兩個沒有其他共同質因數的正整數稱為互質。因為1沒有質因數,1與任何正整數(包括1本身)都是互質 把只包含質因數2、3和5的數稱 ...
質數又稱素數。一個大於1的自然數,除了1和它自身外,不能被其他自然數整除的數叫做質數;否則稱為合數。
質因數(素因數或質因數)在數論里是指能整除給定正整數的質數。除了1以外,兩個沒有其他共同質因數的正整數稱為互質。因為1沒有質因數,1與任何正整數(包括1本身)都是互質
把只包含質因數2、3和5的數稱作醜數(Ugly Number)。例如6、8都是醜數,但7.14不是,因為它們包含質因數7。 習慣上我們把1當做是第一個醜數
class Ugly {
constructor(n, primes) {
this.n = n
this.primes = primes
}
getAll() {
// 超級醜數列表
let res = [1]
let i = 2
let primes = this.primes
// 不知道上限用while迴圈
while (res.length < this.n) {
let arr = Ugly.getPrimies(i)
let k = 0
let l = arr.length
for (; k < l; k++) {
if (!primes.find(item => item === arr[k])) {
break
}
}
// k===l有兩種情況,1.壓根沒有質因數,2.質因數都在指定列表中
if (k === l) {
if (l === 0) {
if (primes.find(item => item === i)) {
res.push(i)
}
} else {
res.push(i)
}
}
i++
}
// 返回醜數數組
return res[this.n - 1]
}
// 計算指定正整數n的質因數
static getPrimies(n) {
let prime = (n) => {
let arr = []
for (let i = 2; i < n / 2 + 1; i++) {
// 求質數利用遞歸,因為返回的是一個arr數組,當數組為空時說明是質數
if (n % i === 0 && !prime(i).length) {
arr.push(i)
}
}
return arr
}
return prime(n)
}
}
export default Ugly