मान लीजिए हमारे पास दो धनात्मक पूर्णांक n और m हैं, जैसे कि 2 ≤ n ≤ 10¹⁸ और 2 ≤ m ≤ n। हमारा लक्ष्य यह पता लगाना है कि क्या संख्या n के कोई सर्व-अंक-क्रमपरिवर्तन (all-digit-permutations) हैं; ताकि यह m की किसी घात के बराबर हो। यदि ऐसा है, तो हम कहते हैं कि n का एक सर्व-अंक-क्रमपरिवर्तन मौजूद है जो m की घात के बराबर है, अन्यथा हम पिछले कथन को असत्य बताते हैं।
उदाहरण के लिए, n = 7182 और m = 12 दिया गया है। 1728, 7182 का एक सर्व-अंक-क्रमपरिवर्तन है और 1728 = 12³, हम कहते हैं कि n का एक सर्व-अंक-क्रमपरिवर्तन m की घात के बराबर है।
इसलिए, यदि इनपुट n = 7182, m = 12 है, तो आउटपुट "An all digit-permutation of n is equal to a power of m" होगा।
हल करने का तरीका
- check_power() फ़ंक्शन परिभाषित करें जो n, m लेता है:
- दोनों संख्याओं के अंकों को सूचियों में निकालें
- यदि दोनों के अंकों का समुच्चय समान है, तो True लौटाएं
- मुख्य विधि से:
- power_array := आकार 100 की सूची 0 से प्रारंभ
- max_range := 10¹⁸
- m की घातें गणना करें जब तक max_range से कम हों
- प्रत्येक घात के लिए check_power(n, power) जांचें
- यदि कोई मेल खाता है, तो सफलता संदेश लौटाएं
- असफलता संदेश लौटाएं
उदाहरण
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