Re[9]: Рациональные числа
От: vdimas Россия  
Дата: 04.04.17 13:56
Оценка:
Здравствуйте, kfmn, Вы писали:

V>>Иначе получалось противоречие сходу, т.к. 1/2 не является элементом мн-ва.

K>Откуда это?

Из условия. Иначе получается растущее вправо бесконечное мн-во, т.е. речи о его минимальности быть не может.
Т.е., мн-во fusible numbers бесконечно.

Тогда принадлежность к нему определяется элементарно (ответил сразу же):

Если оно при этом рациональное, то знаменатель будет степенью двойки после сокращения дроби.


Итого, решение:
UPD (сравнить с 0-лем):
bool isFusible(uint numerator, uint denominator) {
    assert(denominator);
    if(!numerator) return true;
    uint a = numerator, b = denominator;
    while(a!=b) if(a>b) a-=b; else b-=a;
    denominator/=a;
    return !(denominator&(denominator-1));
}
Отредактировано 04.04.2017 16:47 vdimas . Предыдущая версия . Еще …
Отредактировано 04.04.2017 16:15 vdimas . Предыдущая версия .
Отредактировано 04.04.2017 16:07 vdimas . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.