संभावित डुप्लिकेट:
nth ugly number
Find the Kth least number for expression (2^x)*(3^y)*(5^z)अपने प्रमुख कारकों को देखते हुए संख्याएं कैसे उत्पन्न करें, लेकिन अज्ञात घाटियों के साथ?
मैं कैसे एक तेजी से और सुरुचिपूर्ण तरीके से इस समस्या को हल करने की सोच रहा हूँ:
हम परिभाषित "बदसूरत" प्रत्येक नंबर n जिसे फ़ॉर्म में लिखा जा सकता है: 2^x * 3^y * 5^जेड ;, जहां एक्स, वाई और जेड प्राकृतिक संख्याएं हैं। 1500 वें बदसूरत नंबर खोजें।
जैसे पहले "बदसूरत" संख्या हैं:
1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, ...
मैं जानवर बल का उपयोग कर इस समस्या को हल करने के लिए कोशिश की है इस तरह से,:
import itertools as it
def is_ugly(n):
'''Return `True` if *n* is an ugly number.'''
if n == 1:
return True
while not n % 2:
n //= 2
while not n % 3:
n //= 3
while not n % 5:
n //= 5
return n == 1
def nth_ugly(n):
'''Return the nth ugly number.'''
num = 0
for i in it.count(1):
if is_ugly(i):
num += 1
if num == n:
return i
लेकिन यह काफी समय का एक बहुत लेता है, और मैं एक तेज़ और बेहतर समाधान ढूंढना पसंद है।
मैं बदसूरत संख्या के प्रधानमंत्री कारकों पता है, लेकिन मैं एक तरह से सही क्रम निम्नलिखित इन नंबरों उत्पन्न करने के लिए सोच भी नहीं सकते।
मुझे लगता है कि एक तरह से सभी नंबरों की जांच किए बिना इन नंबरों उत्पन्न करने के लिए होना चाहिए। समस्या यह है कि ऐसा लगता है कि प्रमुख कारकों के घाटे को काफी यादृच्छिक रूप से वितरित किया जाता है। इस तालिका में
देखो:
n |number| x | y | z |
------------------------
1 | 1 | 0 | 0 | 0 |
------------------------
2 | 2 | 1 | 0 | 0 |
------------------------
3 | 3 | 0 | 1 | 0 |
------------------------
4 | 4 | 2 | 0 | 0 |
------------------------
5 | 5 | 0 | 0 | 1 |
------------------------
6 | 6 | 1 | 1 | 0 |
------------------------
7 | 8 | 3 | 0 | 0 |
------------------------
8 | 9 | 0 | 2 | 0 |
------------------------
9 | 10 | 1 | 0 | 1 |
------------------------
10 | 12 | 2 | 1 | 0 |
------------------------
11 | 15 | 0 | 1 | 1 |
------------------------
12 | 16 | 4 | 0 | 0 |
------------------------
13 | 18 | 1 | 2 | 0 |
------------------------
14 | 20 | 2 | 0 | 1 |
------------------------
15 | 24 | 3 | 1 | 0 |
------------------------
आप देख सकते हैं एक्स, वाई और जेड मूल्यों किसी भी नियम का पालन करने के लिए नहीं है।
आप में से किसी को इस समस्या के लिए किसी भी समाधान मिल सकता है?
मैं विभिन्न भागों में समस्या को विभाजित करने की कोशिश कर के बारे में सोच रहा हूँ। चूंकि समस्या एक्सपोनेंट की यादृच्छिकता से निर्धारित होती है, इसलिए मैं स्वतंत्र रूप से 2s, 3s, 5s की शक्तियों और फिर 2^x * 3^y, 2^x * 5^z आदि की शक्तियों को उत्पन्न करने का प्रयास कर सकता हूं। और अंत में उन्हें एक साथ रखा, लेकिन मुझे नहीं पता कि यह मेरी समस्या का समाधान करेगा या नहीं।
होमवर्क? साक्षात्कार? मेरे पास यह एक बार होमवर्क के रूप में था, नीचे समाधान पोस्ट करेंगे। –
http://stackoverflow.com/questions/7215315 के अनुसार '' क्लासिक इटरेटर्स 'का उपयोग करने वाला वैकल्पिक संस्करण किसी भी व्यक्ति के लिए पाइथन समाधान को पढ़ने के लिए एक बहुत ही सुंदर पायथन समाधान है [http: // rosettacode.org/wiki/Hamming_numbers#Alternate_version_using_.22Cyclic_Iterators.22) –
यह कुछ साल पहले परीक्षा में दी गई समस्या है जो उडिने स्कूल ऑफ एक्सीलेंस तक पहुंच प्रदान करती है। मैं वहां प्रवेश करने की तैयारी कर रहा हूं इसलिए मैं पिछले परीक्षणों को हल करने की कोशिश कर रहा हूं। मुझे डुप्लिकेट के बारे में खेद है, भले ही प्रोग्रामिंग भाषा अलग हो ... मैंने अभी "बदसूरत संख्या" की कोशिश नहीं की क्योंकि मैंने सोचा था कि यह परीक्षण के लेखक द्वारा आविष्कार किया गया एक यादृच्छिक नाम था। – Bakuriu