Least Common Multiplier

1025

จาก Fundamental Theorem of Arithmetic ตัวเลข xx ใดๆสามารถเขียนได้ในรูปแบบ p1a1p2a2p3a3…pkakp_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,3…pka1,kx2=p1a2,1p2a2,2p3a2,3…pka2,kx3=p1a3,1p2a3,2p3a3,3…pka3,k⋮xn=p1an,1p2an,2p3an,3…pkan,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,3…pkai,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)})