Помогите, пожалуйста, с решением вот этой задачки на Python.
“Найти все простые несократимые дроби, заключенные между 0 и 1, знаменатели которых не превышают 7 (дробь задается двумя натуральными числами — числителем и знаменателем)”
JOHN_16Э нет, дробь несократима, если НОД(GCD) числителя и знаменателя равен единице. Т.е. простейший способ - это перебрать все числители и знаменатели и если fractions.gcd(numerator, denominator)==0, то дробь несократима. Более “умный” способ - это найти все простые числа на указанном промежутке и составлять из них числители и знаменатели так, чтобы никакой простой множитель не попал одновременно и в числитель и в знаменатель, все такие дроби будут несократимы по основной теореме арифметики. Причём второй способ реально станет лучше только на гораздо бОльшем промежутке.
ПУти наверняка разные - для меня самый очевидный и напрашивающийся это перебор значений числителя от 1 до текущего и попытка разделить без остатка текущий знаменатель на этот числитель. Деления без остатка осуществляется символом %, например 4%2
Aris_P@Хорошая мысль, разве что удобнее дерево Калкина — Уилфа.
думаю тут отлично поможет дерево штерна-броко
max_N = 7 def get_fraction( m, n ): if n <= max_N: if m <= n: yield m,n elif m+n > max_N: raise StopIteration for f in get_fraction( m, n+m ): yield f for f in get_fraction( m+n, n ): yield f print( *sorted(get_fraction(1,1)), sep='\n' )