ในบทความนี้ เราจะเข้าใจปัญหาในการค้นหาเลขศูนย์ต่อท้ายของตัวเลขที่ระบุ N ในการแทนค่าแฟกทอเรียลในฐาน 16 เป็นต้น
Input : N = 7 Output : 1 Explanation : fact(7) = 5040 in base10 and 13B0 in base16 having 1 trailing zero. Input : N = 11 Output : 2 Explanation : fact(11) = 39916800 in base10 and 2611500 in base16 having 2 trailing zeroes.
เรามาสรุปขั้นตอนการแปลงเลขฐานสิบจากฐานหนึ่งเป็นฐานอื่นกันก่อน มาดูตัวอย่างการแปลง (5040)10 เป็น (?)16
คือ หารเลขด้วย 16 แล้วเหลือเศษไว้จนหารเลขไม่ได้อีก ผลลัพธ์จะเป็นส่วนที่เหลือในลำดับที่กลับกัน
เป็นผลให้เรามีศูนย์ต่อท้ายหนึ่งตัว และศูนย์ต่อท้ายนี้เราได้เมื่อ 16 หารตัวเลขด้วยเศษ 0
การแยกตัวประกอบเฉพาะของ 5040 =161 * 451* 71 ซึ่งหมายถึง 16 หาร 5040 1 ครั้งด้วยเศษ 0 เท่ากับศูนย์ตามหลัง ด้วยวิธีนี้ เราสามารถคำนวณจำนวนศูนย์ต่อท้ายได้
แนวทางในการหาทางออก
เราได้กล่าวถึงวิธีการหาจำนวนศูนย์ต่อท้าย เรายังรู้ 16 =24 ซึ่งหมายความว่ากำลังสูงสุด 2 ใน N หารด้วยสี่จะเท่ากับกำลังสูงสุดของ 16 ซึ่งเรียกอีกอย่างว่าสูตรของ Legendre
โค้ด C++ สำหรับแนวทางด้านบน
นี่คือไวยากรณ์ C++ ที่เราสามารถใช้เป็นอินพุตเพื่อแก้ปัญหาที่กำหนดได้ -
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int main () { int n = 11; long long int count = 0; long long int value, power = 2; long long int result; do{ value = n / power; count += value; power *= 2; } while (value != 0); // Count has the highest power of 2 result = count / 4; cout << "Number of trailing zeroes in base 16 representation of N : " << result; }
ผลลัพธ์
Number of trailing zeroes in base 16 representation of N: 2
คำอธิบายของโค้ดด้านบน
- เรากำลังเริ่มต้นกำลังด้วยสองกำลังเนื่องจากเราต้องคำนวณกำลังสูงสุด 2
- การนำสูตรของ Legendre ไปใช้ในชั่วขณะหนึ่ง โดยที่เราหาร n ด้วยกำลัง ซึ่งเท่ากับ 2 ในตอนแรก และนับเพิ่มขึ้นด้วยค่าและกำลังด้วย 2
- หลังจากแบ่งกำลังสูงสุดของ 2 กับ 4 ซึ่งเก็บไว้ในตัวแปรการนับ
- ในที่สุดเราก็พิมพ์ผลออกมาได้
บทสรุป
ในบทความนี้ เราแก้ปัญหาการหาจำนวนเลขศูนย์ต่อท้ายในการแทนค่าแฟกทอเรียล N ฐาน 16 ซึ่งเราแก้โดยใช้สูตรของ Legendre เรายังเขียนโค้ด C++ เพื่อแก้ปัญหาเดียวกัน คุณสามารถเขียนโค้ดนี้ในภาษาอื่นๆ เช่น Java, C, python เป็นต้น เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์