Вам нужно взять число и разделить его на каждое из «специальных» чисел: pi, e, sqrt (2), sqrt (3), sqrt (5).После каждого деления определите, является ли полученное число близким к точной дроби.Чтобы выполнить последнюю часть, используйте алгоритм продолжения дроби, чтобы найти хорошее приближение к числу.Существуют критерии, которые можно использовать в продолжении расширения дроби, чтобы определить, является ли приближение почти точным.Если вы получите хорошую дробь с небольшими числами, которая почти точна, то это ваш ответ - дробь умноженная на специальное число, на которое делилось в начале.Да, и рассмотрите "1" как делитель, так что простые дроби тоже выходят.
Был там, сделал это, работает хорошо.Я не помню алгоритм получения приблизительных дробей без сохранения и свертывания всей продолженной дроби, но он недавно был связан здесь на SO.