質數又稱素數。一個大於1的天然數,除了1和它自身外,不能被其餘天然數整除的數叫作質數;不然稱爲合數。
質因數(素因數或質因子)在數論裏是指能整除給定正整數的質數。除了1之外,兩個沒有其餘共同質因子的正整數稱爲互質。由於1沒有質因子,1與任何正整數(包括1自己)都是互質
把只包含質因子二、3和5的數稱做醜數(Ugly Number)。例如六、8都是醜數,但7.14不是,由於它們包含質因子7。 習慣上咱們把1當作是第一個醜數javascript
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