Codeforces and Polygon may be unavailable from December 6, 19:00 (UTC) to December 6, 21:00 (UTC) due to technical maintenance. ×

removed1's blog

By removed1, 15 years ago, In Russian

В решении Исенбаева 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# ?

  • Vote: I like it
  • 0
  • Vote: I do not like it