สมมติว่า เรามีจำนวนเต็มบวกสองจำนวน n และ m โดยที่ 2 ≤ n ≤ 1018 และ 2 ≤ m ≤ n เป้าหมายของเราคือหาว่ามีการเรียงสับเปลี่ยนของตัวเลข n ทั้งหมดหรือไม่ เท่ากับยกกำลังหนึ่งของ m หากมี เราจะระบุว่ามีการสับเปลี่ยนตัวเลขทั้งหมดของ n ซึ่งเท่ากับยกกำลังของ m มิฉะนั้น เราจะระบุข้อความสั่งก่อนหน้านี้ว่าเป็นเท็จ
ตัวอย่างเช่น เราได้รับ n =7182 และ m =12 เนื่องจาก 1728 เป็นการเรียงสับเปลี่ยนของตัวเลขทั้งหมดของ 7182 และ 1728 =12^3 เราระบุว่าการเรียงสับเปลี่ยนของตัวเลขทั้งหมดของ n เท่ากับกำลังของ m .
ดังนั้น ถ้าอินพุตเป็น n=7182, m =12; จากนั้นผลลัพธ์จะเป็น "การเรียงสับเปลี่ยนหลักทั้งหมดของ n เท่ากับยกกำลัง m"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดฟังก์ชัน check_power() นี่จะใช้เวลา n, m
- temp_arr_1 :=รายการใหม่
- temp_arr_2 :=รายการใหม่
- ในขณะที่ n> 0, ทำ
- แทรก (n mod 10) ที่ส่วนท้ายของ temp_arr_1
- n :=ค่าพื้น n / 10
- ในขณะที่ m> 0, ทำ
- แทรก (m mod 10) ที่ส่วนท้ายของ temp_arr_2
- m :=ค่าพื้น m / 10
- ถ้าชุดใหม่จาก temp_arr_1 เหมือนกับชุดใหม่จาก temp_arr_2 แล้ว
- คืนค่า True
- คืนค่าเท็จ
- จากวิธีหลัก ให้ทำดังนี้ -
- power_array :=รายการขนาด 100 ใหม่ที่เริ่มต้นด้วย 0
- max_range :=10^18
- power_array[0] :=ม
- ผม :=1
- ในขณะที่ (power_array[i - 1] * ม.)
- power_array[i] :=power_array[i - 1] * ม.
- ผม :=ผม + 1
- ถ้า check_power(n, power_array[j]) เป็น True แล้ว
- ส่งคืน "การเรียงสับเปลี่ยนหลักทั้งหมดของ n เท่ากับยกกำลัง m"
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
def check_power(n, m): temp_arr_1 = [] temp_arr_2 = [] while (n > 0) : temp_arr_1.append(n % 10) n //= 10 while (m > 0) : temp_arr_2.append(m % 10) m //= 10 if (set(temp_arr_1) == set(temp_arr_2)): return True return False def solve(n, m): power_array = [0] * 100 max_range = pow(10, 18) power_array[0] = m i = 1 while (power_array[i - 1] * m < max_range) : power_array[i] = power_array[i - 1] * m i += 1 for j in range(i): if (check_power(n, power_array[j])) : return "An all digit-permutation of n is equal to a power of m" return "No all digit-permutation of n is equal to a power of m" n, m = 7182, 12 print(solve(n, m))
อินพุต
7182, 12
ผลลัพธ์
An all digit-permutation of n is equal to a power of m