Skip to content

Instantly share code, notes, and snippets.

@pranithan-kang
Last active October 27, 2024 14:30
Show Gist options
  • Save pranithan-kang/d96bd2f9fe2b2fd2f40c2a161dec422e to your computer and use it in GitHub Desktop.
Save pranithan-kang/d96bd2f9fe2b2fd2f40c2a161dec422e to your computer and use it in GitHub Desktop.

ทำไม $2^{136279841} - 1$ จึงเขียนเป็นเลขฐานสิบได้ 41024320 ตำแหน่ง

ต้นฉบับใน https://www.facebook.com/share/p/Q4d2xXo63Wuu1vMw/

จากที่ผู้เขียนเกิดความสงสัยว่า $2^{136279841} - 1$ ทำไมถึงเขียนเป็นเลขฐานสิบได้ 41024320 ตำแหน่ง ก็เลยไปนั่งคิดจนกระทั่งได้วิธีการมาดังนี้

ตีโจทย์

ขอลดรูปคำถาม* เป็น $2^P$ ทำไมถึงเขียนเป็นเลขฐานสิบได้ 41024320 ตำแหน่ง ก็ต้องตีโจทย์กันต่อว่าการนับตำแหน่งในเลขฐาน 10 มันคือการเขียนคำตอบให้อยู่ในรูป $10^n$ นั่นเอง

ดังนั้นเป้าหมายของเราคือหา n ซึ่งทำให้ สมการด้านล่างนี้เป็นจริง

$$ 2^P = 10^n $$

ความเป็นไปได้ในการหาคำตอบ

ผู้เขียนคิดถึงความเป็นไปได้อยู่สองวิธีก็คือ

  • คำนวณ $2^P$ มันเลยอย่างนั้น แล้วค่อยไปนับหลักเอาละกัน
  • ใช้ค่า P เพื่อคำนวณออกมาได้ไหม

คำนวณ $2^P$ มันเลยอย่างนั้น

แนวทางนี้สุดโต่งถือเป็นการใช้กำลังเยอะสุดคือคำนวณ 2 คูณกันไปเรื่อย ๆ P ครั้ง ซึ่งแนวทางนี้เราไม่อาจใช้เครื่องคิดเลขธรรมดาจิ้มหาคำตอบให้เราได้หรอกครับว่ามันคือจำนวนฐานสิบกี่ตัว เพราะคิดเลขมัน overflow ครับ มันตายเพราะความจำมันเต็มก่อน ดังนั้นเราจะไปอีกแนวทางหนึ่งนะครับ

ใช้ค่า P เพื่อคำนวณออกมาได้ไหม

แนวทางนี้ดูเหมือนจะเป็นวิธีที่เหมาะสมกับเครื่องคิดเลขธรรมดาที่เรามี ที่เราจะสามารถใช้จิ้มหาคำตอบได้สุดแล้วล่ะครับ

มีเครื่องมืออะไรในมือบ้าง

เครื่องมือทางคณิตศาสตร์ที่ผู้เขียนนึกถึงเป็นอย่างแรกคือ คุณสมบัติของเลขยกกำลัง (Exponential Properties) จากนั้นคิดก็ลองเขียนไปเขียนมา ปรากฏว่าต้องมีเรื่อง Logarithm เข้ามาเกี่ยวด้วย (จะกล่าวต่อไปว่าเกี่ยวอย่างไร)

ใช้สัญชาตญาน (Intuition) ไว ๆ

เริ่มจากการคิดว่า $2^P$ เราจะทำให้มันเป็น $10^n$ อย่างไรดีหว่า เพราะ 10 มันเขียนเป็น $2^a$ ไม่ได้ งั้นลอง 8 ก่อน ก็คือทำไงให้สามารถเขียน

$$ 2^P = 8^b $$

เนื่องจาก 8 ใกล้เคียง 10 ที่สุดแล้ว ที่สามารถเขียนในรูป $2^a$ ได้ เนื่องจาก $8 = 2\times2\times2 = 2^3$ และ $2 = \sqrt[3]{8}$ ดังนั้นเราจะใช้ 8 ก่อน แล้วจึงพบว่า

$$ 2^P = 8^{\frac{P}{3}} $$

ซึ่งลองคำนวณตัวเลขก็สมเหตุสมผลมาก ๆ คือ $\frac{136279841}{3} = 45426613.67$

$$\begin{aligned} 2^{136279841} & = 8^{45426613.67} \\ & = (2\cdot2\cdot2)^{45426613.67} \\ & = 2^{45426613.67 + 45426613.67 + 45426613.67} \\ & = 2^{(3)(45426613.67)} \end{aligned}$$

แก้จริง

ทีนี้ ๆ ถ้าเราสามารถเขียน 10 ให้อยู่ในรูป $2^a$ ได้ก็จะจบเลยใช่ไหมครับ ก็เอา P หารด้วย a ก็จะได้ n เลย ดังนั้น เราก็เลยอยากรู้ว่า a มีค่าเท่าไหร่ ในสมการ $2^a = 10$ ใช่ไหมครับ พอถึงตอนนี้ความรู้เรื่องเลขยกกำลังอย่างเดียวก็จะไม่พอแล้วล่ะครับ ดังนั้นถึงจุดนี้ก็ต้องอาศัยคุณสมบัติของ Logarithm เข้ามาช่วยครับ เริ่มเลย

$$\begin{aligned} 2^a & = 10 \\ log_{10}2^a & = log_{10}10 && \text{ใส่ $log_{10}$ ทั้งสองข้าง} \\ a \cdot log_{10}2 & = log_{10}10 && \text{จากสมบัติ $log_a{b}^c = c \cdot log_a{b}$ } \\ a \cdot log_{10}2 & = 1 && \text{จากสมบัติ $log_a{a} = 1$} \\ a & = \frac{1}{log_{10}2} \end{aligned}$$

ดังนั้นเราก็ได้คำตอบของเรา n จาก

$$\begin{aligned} n & = \frac{P}{\frac{1}{log_{10}{2}}} \\ n & = P \cdot log_{10}{2} \end{aligned}$$

เพราะฉะนั้น $2^{136279841} \approx 10^{41024320}$

หรือเขียนเป็นฐานสิบได้ 41024320 ครับ

ปล. เราสามารถเขียน n ให้สวยขึ้นอีกนิดนึงด้วยการใช้คุณสมบัติ Logarithm ได้แบบนี้ครับ

$$\begin{aligned} n & = P \cdot log_{10}{2} \\ & = P \cdot \frac{ln{2}}{ln{10}} && \text{จากสมบัติ $log_a{b} = \frac{log_c{b}}{log_c{a}}$} \end{aligned}$$

ดังนั้นหากต้องการคำนวณหลักของฐานอื่นๆ ที่ไม่ใช่ฐานสิบ เช่น ฐาน 16 ก็สามารถใช้เทคนิคนี้หาคำตอบได้ครับ คือ

$$ 2^P = 16^{P \cdot \frac{ln{2}}{ln{16}}} $$

เป็นต้น


*การลดรูปคำถาม จากจำนวน $2^{136279841} - 1$ ขอตัดให้เหลือเพียง $2^{136279841}$ เพราะ -1 กระทบกับหลักสุดท้ายเพียงหลักเดียว และ $2^{136279841}$ ไม่มีทางเป็นตัวเลขกลมๆ ที่สามารถเขียนในรูป $10^n$ ได้ โดยที่ n เป็นจำนวนเต็มได้ เช่น

$$10^5 = 10000$$

ไม่เช่นนั้น $10^n - 1$ จะได้เป็นจำนวน 999.. ซึ่งมีหลักเป็น n-1 ตำแหน่งเช่น

$$10^5 - 1 = 10000 - 1 = 9999$$

ดังนั้น การตัด -1 ออกจึงไม่ควรกระทบกับตำแหน่งของคำตอบในเลขฐานสิบ

และขอแทน 136279841 ให้เป็น P

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment