5 kyu
求 n 的質因數,拼接成特定的字串形式。
function primeFactors(n) {
let array = [];
let i = 2;
while (n > 1) {
if (n % i == 0) {
array.push(i);
n = n / i;
continue;
}
i++;
}
let counter = array.reduce((sum, item) => {
if (sum[item]) {
sum[item]++;
} else {
sum[item] = 1;
}
return sum;
}, {});
return Object.entries(counter)
.reduce((sum, item) => {
if (item[1] > 1) {
return sum + `(${item[0]}**${item[1]})`;
} else {
return sum + `(${item[0]})`;
}
}, "")
}
array = []; 用來儲存找到的質因數;i 是 while 迴圈中被重複利用的除數,起始值為 2。
進入 while 迴圈,該迴圈的停止條件是直到 n 變為 1。
首先檢查 n 是否能夠被 i 整除,如果可以,將 i 加入 array 陣列,然後將 n 更新為 n 除以 i,以繼續尋找下一個質因數;如果不能,則增加 i 的值,繼續尋找。
使用 array.reduce 計算每個質因數的出現次數。結果是一個物件,其中鍵是質因數,值是其出現的次數;Object.entries(counter) 將物件轉換為 [key, value] 的陣列,然後使用 reduce 將這些轉換為字串。
如果質因數出現超過一次,加上 ** 次數,否則僅加上 ()。
本題依舊是讓人頭痛的數學為主的程式題,身為設計本科離數學真的十分久遠~~
我已經有心理準備要讓姪子教我數學的打算了(;´༎ຶД༎ຶ`)