2012-05-26 46 views
7

Tôi đang cố tìm ra yếu tố chung lớn nhất.Python Trong khi Vòng lặp, toán tử (&) không hoạt động

Tôi đã viết một thuật toán xấu (hoạt động chuyên sâu) làm giảm giá trị thấp hơn bằng một, kiểm tra bằng% để xem liệu nó có phân chia đều cả tử số và mẫu số hay không, nếu có thì nó thoát khỏi chương trình. Tuy nhiên, vòng lặp while của tôi không sử dụng toán tử và toán tử, và do đó khi tử số chia hết thì nó dừng lại, mặc dù nó không phải là câu trả lời đúng.

Các số liệu mà tôi đang sử dụng là 54 và 42, đúng GCD (mẫu số chung lớn nhất) là 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 

Câu trả lời tôi nhận được là 27, mà nói với tôi một lần khi nó đạt đến 27 và có thể chia 54/27 đồng đều, nó dừng lại. Bất kỳ suy nghĩ về cách sử dụng một và nhà điều hành trong một vòng lặp while trong python?

Cảm ơn!

Trả lời

15

Bạn nên sử dụng các từ khóa and thay vì Bitwise và nhà điều hành &:

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

Đây cũng là giống nhau:

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

Lưu ý rằng &and sẽ cho kết quả tương tự trong trường hợp đầu tiên, nhưng không phải trong trường hợp thứ hai.

Vấn đề của bạn là bạn muốn sử dụng or thay vì and. Ngoài ra thuật toán của bạn là rất kém hiệu quả. Có better ways to calculate the GCD.

+0

Cảm ơn bạn đã nhập, tôi đã thử sử dụng từ khóa và, nhưng tôi vẫn có 27, bạn có nhận được kết quả tương tự không? – Blakedallen

+0

@Blakedallen: Thử sử dụng 'hoặc'. –

+0

Bạn chính xác điều này là rất không hiệu quả! Tôi tin rằng thuật toán của Euclid tốt hơn nhiều. – Blakedallen

0

Sử dụng từ khóa and. & là bitwise và toán tử.

Các vấn đề liên quan