iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0
自我挑戰組

解三十天的 CodeWars系列 第 26

Primes in numbers

  • 分享至 

  • xImage
  •  

CodeWars 題目

Link

難度

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 將這些轉換為字串。

如果質因數出現超過一次,加上 ** 次數,否則僅加上 ()

心得

本題依舊是讓人頭痛的數學為主的程式題,身為設計本科離數學真的十分久遠~~
我已經有心理準備要讓姪子教我數學的打算了(;´༎ຶД༎ຶ`)


上一篇
Rot13
下一篇
Build Tower
系列文
解三十天的 CodeWars30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言