2012-05-26 4 views
7

Я пытаюсь найти наиболее распространенный фактор.Python While Loop, оператор and (&) не работает

Я написал плохой (интенсивный) алгоритм, который уменьшает значение на единицу, проверяет использование%, чтобы увидеть, равномерно ли он делит как числитель, так и знаменатель, если он завершает работу. Однако мой цикл while не использует оператор and, и, как только числитель делится, он останавливается, хотя это не правильный ответ.

Цифры, которые я использую являются 54 и 42, правильный НОД (наибольший общий знаменатель) является 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 равномерно, он останавливается. Любые мысли о том, как использовать a и operator в цикле while в python?

Спасибо!

ответ

15

Вы должны использовать ключевое слово and вместо побитовое и оператора &:

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

Это также тот же:

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

Обратите внимание, что & и and даст тот же результат первый случай, но не во втором.

Ваша проблема заключается в том, что вы хотите использовать or вместо and. Также ваш алгоритм крайне неэффективен. Есть better ways to calculate the GCD.

+0

Спасибо за ввод, я попытался использовать ключевое слово и, но у меня все еще есть 27, вы получаете тот же результат? – Blakedallen

+0

@Blakedallen: Попробуйте использовать 'или'. –

+0

Вы правы, это очень неэффективно! Я считаю, что алгоритм Евклида намного лучше. – Blakedallen

0

Используйте ключевое слово and. & является поразрядным и оператором.