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

由于有些函数只会返回 `float` 所以在大数的时候会造成一些精度丢失，所以如果确定操作后是整数，那么有下面的重载：

## 精确开平方

```cpp title="sqrti.cc" :collapsed-lines
using i64 = long long;
i64 sqrt(i64 n)
{
    i64 s = std::sqrt(n);
    while (s * s > n)
    {
        s--;
    }
    while ((s + 1) * (s + 1) <= n)
    {
        s++;
    }
    return s;
}
```

## 精准log

```cpp title="logi.cc" :collapsed-lines
int logi(int a, int b)
{
    int t = 0;
    i64 v = 1;
    while (v < b)
    {
        v *= a;
        t++;
    }
    return t;
}
```
