Least Common Multiplier

1025

จาก Fundamental Theorem of Arithmetic ตัวเลข xx ใดๆสามารถเขียนได้ในรูปแบบ p1a1p2a2p3a3pkakp_1^{a_1}p_2^{a_2}p_3^{a_3} \dots p_k^{a_k} โดยที่แต่ละ pip_i เป็นจำนวนเต็มที่แตกต่างกันและแต่ละ aia_i เป็นจำนวนเต็มที่ไม่เป็นลบ

ถ้าหากมีจำนวนเต็ม x1,x2,x3,,xnx_1, x_2, x_3, \dots, x_n โดยที่

x1=p1a1,1p2a1,2p3a1,3pka1,kx2=p1a2,1p2a2,2p3a2,3pka2,kx3=p1a3,1p2a3,2p3a3,3pka3,kxn=p1an,1p2an,2p3an,3pkan,kx_1 = p_1^{a_{1, 1}}p_2^{a_{1, 2}}p_3^{a_{1, 3}} \dots p_k^{a_{1, k}} \\ x_2 = p_1^{a_{2, 1}}p_2^{a_{2, 2}}p_3^{a_{2, 3}} \dots p_k^{a_{2, k}} \\ x_3 = p_1^{a_{3, 1}}p_2^{a_{3, 2}}p_3^{a_{3, 3}} \dots p_k^{a_{3, k}} \\ \vdots \\ x_n = p_1^{a_{n, 1}}p_2^{a_{n, 2}}p_3^{a_{n, 3}} \dots p_k^{a_{n, k}} \\

จากนิยามของ LCM จะสังเกตุได้ว่า

lcm(x1,x2,x3,,xn)=p1max(a1,1,a2,1,a3,1,,an,1)p2max(a1,2,a2,2,a3,2,,an,2)p3max(a1,3,a2,3,a3,3,,an,3)pnmax(a1,n,a2,n,a3,n,,an,n)lcm(x_1, x_2, x_3, \dots, x_n) = p_1^{max(a_{1,1}, a_{2,1}, a_{3,1}, \dots ,a_{n,1})}p_2^{max(a_{1,2}, a_{2,2}, a_{3,2}, \dots ,a_{n,2})}p_3^{max(a_{1,3}, a_{2,3}, a_{3,3}, \dots ,a_{n,3})} \dots p_n^{max(a_{1,n}, a_{2,n}, a_{3,n}, \dots ,a_{n,n})}

ดังนั้นเราจะแยกตัวประกอบแต่ละ xix_i เพื่อหาตัวหารที่เป็นจำนวนเฉพาะ ซึ่งจะทำให้เราสามารถเขียน xix_i ในรูปแบบ xi=p1ai,1p2ai,2p3ai,3pkai,kx_i = p_1^{a_{i, 1}}p_2^{a_{i, 2}}p_3^{a_{i, 3}} \dots p_k^{a_{i, k}} ได้ ทั้งนี้ทำได้ด้วย trial division ซึ่งใช้เวลาเพียง O(xi)O(\sqrt{x_i}) เท่านั้น อัลกอริทึมทั้งหมดจึงใช้เวลาในการทำงานเท่ากับ O(nmax(x1,x2,x3,,xn))O(n\sqrt{max(x_1, x_2, x_3, \dots, x_n)})