---
url: /algo/b0kekmd0/index.md
---
::: warning 警告
本模板为了便于理解，包含了大量的详细注释以及规范的 `std::` 命名空间前缀。在您将代码复制并提交至相关竞赛或评测平台前，请务必根据个人的编程习惯进行调整，重点建议删除冗余注释并精简代码风格。保留明显的模板特征极易被系统的查重算法或 AIGC 监测机制误标为“人工智能生成内容”，从而对您的评审进度或最终成绩产生不利影响。
:::

## 字符串转int 128

```cpp title="stringToi128.cc" :collapsed-lines
using i128 = __int128;
i128 toi128(const std::string &s)
{
    i128 n = 0;
    for (auto c : s)
    {
        n = n * 10 + (c - '0');
    }
    return n;
}
```

## 开平方

```cpp title="sqrti128.cc" :collapsed-lines
using i128 = __int128;
i128 sqrti128(i128 n)
{
    i128 lo = 0, hi = 1E16;
    while (lo < hi)
    {
        i128 x = (lo + hi + 1) / 2;
        if (x * x <= n)
        {
            lo = x;
        }
        else
        {
            hi = x - 1;
        }
    }
    return lo;
}
```

## 最大公约数

```cpp title="gcdi128.cc" :collapsed-lines
using i128 = __int128;
i128 gcd(i128 a, i128 b)
{
    while (b)
    {
        a %= b;
        std::swap(a, b);
    }
    return a;
}
```
