Блог пользователя removed1

Автор removed1, 17 лет назад, По-русски

В решении Исенбаева http://www.topcoder.com/stat?c=problem_solution&rm=302833&rd=14174&pm=10420&cr=22221928

есть такой фрагмент

if (10000000000000000L / a < b) {
return Long.MAX_VALUE;
}
long g = gcd(a, b);
long t = a / g;
return t * b;

Деление в первой строке нужно главным образом для того, чтобы распознать случаи, когда ниже возможно переполнение при умножении (на самом деле эта отсечка в том решении более сильная и еще ускоряет работу программы, но это вторично). Некрасиво тут вот что: деление -- одна из самых медленных операций, и в этом решении является боттлнеком. Наверное на Java улучшить этот код нельзя.

Как такая же задача решается в других языках (кроме, конечно тривиальных случаев использования более длинного типа данных)? На каких она решается красиво?

UPD: что насчет C# ?

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

17 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
Я иногда перемножаю в long double-ах и смотрю, чтобы получилось не слишком большое число.
17 лет назад, скрыть # |
 
Проголосовать: нравится 0 Проголосовать: не нравится
По этому поводу можно почитать здесь и здесь .