Вдохновленные Дешево, Быстро, Хорошо , мы собираемся реализовать алгоритм, который имеет ровно два из них.
Математика
Учитывая два ненулевых целых числа a и b , GCF d является наибольшим целым числом, которое делит и a и b без остатка. Коэффициенты Безу - это пары целых чисел (x, y) , для которых ax + by = d . Коэффициенты Безу не являются уникальными. Например, учитывая:
a = 15, b = 9
У нас есть
d = 3
x = 2
y = -3
Так как 15*2 + 9*(-3) = 30 - 27 = 3
.
Распространенным способом вычисления GCF и пары коэффициентов Безу является использование алгоритма Евклида , но это ни в коем случае не единственный способ.
Код
Ваша программа должна принимать два целых числа в качестве входных данных. Он должен выводить / возвращать наибольший общий коэффициент и одну пару коэффициентов Безу.
Пример ввода:
15 9
пример вывода
3 (2, -3)
Выходные данные могут быть в любом порядке и формате, но должно быть ясно, что является GCF, а какие - коэффициентами.
Закулисный
Ваша программа может быть дешевой, быстрой и хорошей. К сожалению, это может быть только два из них одновременно.
- Когда это не дешево , программа должна использовать чрезмерное количество системных ресурсов.
- Когда это не быстро , программа должна занять слишком много времени.
- Когда это не хорошо , вывод программы должен быть неправильным.
Программа должна уметь делать (ну, не делать) все три. Что делает, когда зависит от вас - это может быть основано на времени, компиляторе, какой ввод больше и т. Д. Некоторые дополнительные примечания:
- Ваша программа не должна быть явно закулисной и должна пройти беглый осмотр. Я был бы немного подозрительным, если бы вы реализовали три отдельных алгоритма.
- В дешевом случае «чрезмерное количество системных ресурсов» - это все, что может замедлить работу других программ. Это может быть память, пропускная способность и т. Д.
- В быстром случае «чрезмерное время» означает, как оно работает в дешевых и хороших случаях. Программа еще должна закончиться. Чем ближе вы можете к «невероятно разочаровывающему, но недостаточно разочаровывающему, чтобы остановить программу», тем (смешнее и лучше).
- В хорошем случае вывод не должен быть явно неправильным и должен пройти краткий осмотр. Я был бы очень подозрительно, если бы это дало мне GCF "2 анна половина".
Это конкурс популярности, поэтому большинство побед выигрывает!
РЕДАКТИРОВАТЬ
Чтобы уточнить, я ищу для программ , которые могут быть «быстро и дешево» и «дешево и хорошо» и «быстро и хорошо» в различных случаях, а не те , которые просто делают одну из них.
источник
Ответы:
С
Это дешево и быстро. Вы получаете GCD в мгновение ока. Однако парень, который сделал это, не имел ни малейшего понятия о том, что "беззерное со-что-то", поэтому он просто разделил a и b на gcd. (что еще хуже, в этой точке a и b довольно далеки от их первоначального значения из-за алгоритма, который он мудро выбрал)
источник
C #
Это вычисляет коэффициенты Безу. Я использовал расширенный евклидов алгоритм .
источник
Perl 5
Недорого: main () вызывается рекурсивно (заполняя стек), пока perl не выдаст предупреждение «глубокая рекурсия», которое выйдет из приложения из-за обработчика __WARN__.
Не быстро: когда алгоритмы gcf () возвращают правильные результаты, код просто зависает на несколько секунд (select () в main ()).
Не хорошо: все результаты выше 99 (или ниже -99) неверны.
В целом, не так творчески; с нетерпением жду более элегантных ответов.
источник
питон
Это дешево и быстро, но плохо в том, что диапазон ограничен на самом большом входе, поэтому он может не найти пару коэффициентов.
Хорошая головоломка
источник
Javascript
Не дешево
Использует много системных ресурсов.
Не быстрый
Используйте обратный вызов, просто как дополнительный отказоустойчивый.
Фигово
Строгое ограничение
gcf(10, 10)
, только для безопасного места на диске.источник