↵
↵
↵
<spoiler summary="
↵
~~~~~↵
program sum;↵
↵
{$Mode Delphi}↵
↵
uses↵
gmp;↵
↵
var↵
sa, sb: string;↵
a, b: MPInteger;↵
begin↵
readLn(sa);↵
readLn(sb);↵
a := sa; b := sb;↵
writeLn(string(a + b));↵
end.↵
~~~~~↵
↵
</spoiler>↵
↵
↵
Как он работает? Этот модуль содержит заголовки функций, импортируемые из [_GNU Multiprecision Library_](https://gmplib.org/). Программа и библиотека связываются динамически, поэтому для работы программы необходимо, чтобы эта библиотека была установлена. К счастью, в большинстве дистрибутивов Linux она установлена по умолчанию и поэтому может быть использована в таких системах, как _ejudge_ и _Яндекс.Контест_. В тестирующих системах на _Windows_ библиотека не установлена, поэтому такая штука не сработает.↵
↵
Для удобства работы в модуле реализована объектно-ориентированная обёртка над функциями `libgmp`, для которой перегружены все необходиые операторы (да-да, во _Free Pascal_ есть перегрузка операторов!)↵
↵
Что еще примечательно, в `libgmp` реализовано быстрое извлечение целочисленного квадратного корня. Поэтому можно написать очень простой, быстрый и короткий код на задачу F с [заочного тура Открытки](https://olympiads.ru/zaoch
↵
How does it work? This unit contains bindings for [_GNU Multiprecision Library_](https://gmplib.org/). The program and the library are linked dynamically, so, to make the program work this library is required to install. Luckily, many Linux distros install `libgmp` by default and so this trick can be used in the testing systems like _ejudge_ or _Yandex.Contest_. Testing systems on _Windows_ don't have this library, so this thing won't work.↵
↵
For convenience the unit implements an object-oriented wrapper for `libgmp` functions, for which all the operators are overloaded (yes, _Free Pascal_ supports operator overloading!)↵
↵
What is also remarkable, `libgmp` has implementation for calculating fast integer square root. So here is a short implementation for problem F for [elimination to Moscow Open Olympiad](https://olympiads.ru/zaoch) (the website by the link is in Russian and , unfortunately, I cannot find the English version of the statements).↵
↵
<spoiler summary="
↵
~~~~~↵
program F;↵
↵
{$mode objfpc}{$h+}↵
{$optimization LEVEL3}↵
↵
uses gmp;↵
↵
var↵
num: string;↵
mpNum: MPInteger;↵
root, rem: MPInteger;↵
begin↵
readLn(num);↵
mpNum := num;↵
mpNum := mpNum - 1;↵
z_sqrtrem(root, rem, mpNum);↵
if rem < root then begin↵
writeln(string(rem + 1));↵
end else begin↵
writeln(string(2 * root + 1 - rem));↵
end;↵
end.↵
~~~~~↵
↵
</spoiler>↵
↵