2012-05-26 18 views
7

मैं सबसे बड़ा आम कारक खोजने की कोशिश कर रहा हूं।पायथन जबकि लूप, और (&) ऑपरेटर काम नहीं कर रहा है

मैंने एक खराब (ऑपरेशन गहन) एल्गोरिदम लिखा है जो कम मूल्य को कम करता है, यह देखने के लिए% का उपयोग करके जांच करता है कि यह संख्यात्मक और denominator दोनों को समान रूप से विभाजित करता है, अगर यह प्रोग्राम से बाहर निकलता है। हालांकि, मेरा समय लूप ऑपरेटर का उपयोग नहीं कर रहा है, और इस प्रकार संख्यात्मक विभाजित होने पर यह बंद हो जाता है, भले ही यह सही उत्तर न हो।

संख्या मैं उपयोग कर रहा हूँ 54 और 42, सही GCD कर रहे हैं (सबसे बड़ा आम भाजक) है 6.

#heres a simple algorithm to find the greatest common denominator: 

iterations = 0; #used to calculate number of times while loop is executed 

u = 54; v= 42; d = v-1; #u is the numerator, v is the denominator, d is the number decremented by one 

while ((v % d !=0) & (u % d != 0)): #while both numerator AND denominator cannot be evenly divided by the decremented number 
d -= 1 #decrement the number by one 
print d #print the number decremented 
iterations +=1 #add 1 to the count of iterations in while loop 

print "the gcd is " +str(d) #should be 6 when the number can evenly divide both 
print "the number of iterations was " +str(iterations) #display times it took algorithm to complete 

जवाब मैं हो रही है 27 है, जो मुझसे कहता है एक बार यह 27 तक पहुँच जाता है और विभाजित कर सकते हैं 54/27 समान रूप से, यह बंद हो जाता है। अजगर में थोड़ी देर में एक ऑपरेटर का उपयोग करने के तरीके पर कोई विचार?

धन्यवाद!

उत्तर

15

आप कीवर्ड and बजाय बिटवाइज़ और ऑपरेटर & का उपयोग करना चाहिए:

while (v % d != 0) and (u % d != 0): 

यह बात एक ही है:

while (v % d) and (u % d): 

& और and में ही परिणाम प्राप्त होगा ध्यान दें कि पहला मामला, लेकिन दूसरे में नहीं।

आपकी समस्या हालांकि यह है कि आप and के बजाय or का उपयोग करना चाहते हैं। इसके अलावा आपका एल्गोरिदम अत्यधिक अक्षम है। better ways to calculate the GCD हैं।

+0

इनपुट के लिए धन्यवाद, मैंने कीवर्ड का उपयोग करने की कोशिश की और, लेकिन मुझे अभी भी 27 मिल गया है, क्या आपको एक ही परिणाम मिल रहा है? – Blakedallen

+0

@ ब्लैकलेन: 'या' का उपयोग करने का प्रयास करें। –

+0

आप सही हैं यह बेहद अक्षम है! मेरा मानना ​​है कि यूक्लिड का एल्गोरिदम बहुत बेहतर है। – Blakedallen

0

and कीवर्ड का उपयोग करें। & थोड़ा सा और ऑपरेटर है।

संबंधित मुद्दे