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
將這些轉換為字串。
如果質因數出現超過一次,加上 **
次數,否則僅加上 ()
。
本題依舊是讓人頭痛的數學為主的程式題,身為設計本科離數學真的十分久遠~~
我已經有心理準備要讓姪子教我數學的打算了(;´༎ຶД༎ຶ`)