2012-05-26 13 views
7

En büyük ortak faktörü bulmaya çalışıyorum.Python Döngü, ve (&) işleci çalışmıyor

Düşük değeri birer birer azaltan kötü (işlem yoğun) bir algoritma yazdım,% değerini kullanarak, hem pay hem de paydayı eşitleyip ayırmadığını, eğer programdan çıkarsa eşit görüp görmediğini kontrol ettim. Bununla birlikte, while döngüsüm ve operatörü kullanmıyor, ve böylelikle sayı bölünürse, doğru cevap olmasa bile durur. Ben kullanıyorum

numaraları 54 ve 42 doğru GCD olan (büyük ortak payda) 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 

olduğunu alıyorum cevabım 27 ulaşır ve bölebilirsiniz bana bir kez söyler, 27 olduğu 54/27 eşit olarak durur. Python'da bir süre operatörün nasıl kullanıldığına dair herhangi bir düşünce var mı?

Teşekkürler!

cevap

15

anahtar kelimesini and yerine Bit seviyesinde ve operatörü & kullanarak edilmelidir:

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

Aynı zamanda geçerli:

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

& ve and aynı sonucu vereceği Not olduğunu İlk durum, ama ikinci değil.

Sorununuz, and yerine or kullanmak istediğinizdir. Ayrıca algoritmanız oldukça verimsizdir. better ways to calculate the GCD vardır.

+0

Girdiğiniz için anahtar kelimeyi kullanmayı denedim ve hala 27 tane aldım, aynı sonucu alıyor musunuz? – Blakedallen

+0

@Blakedallen: 'or' kullanmayı deneyin. –

+0

Bunun çok verimsiz olduğunu görüyorsunuz! Euclid'in algoritmasının çok daha iyi olduğuna inanıyorum. – Blakedallen

0

and anahtar sözcüğünü kullanın. &, bir bit ve operatördür.