版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
title: 模板 - 自动取模的整数类 (mod_int) categories:
即 $\mathbb{Z}_m$
基于 C++14 标准, 实现了四则运算, 逆元与对输入输出流的支持
{% note warning %} 仅在 GCC 下测试过 {% endnote %}
{% note warning %} https://cplib.tifa-233.com/src/code/math/mint.hpp, https://cplib.tifa-233.com/src/code/math/mint_s30.hpp, https://cplib.tifa-233.com/src/code/math/mint_s63.hpp, https://cplib.tifa-233.com/src/code/math/mint_d31.hpp, https://cplib.tifa-233.com/src/code/math/mint_d63.hpp 存放了笔者对该算法/数据结构的最新实现, 其中使用了 Montgomery 约乘, 建议前往此处查看相关代码 {% endnote %}
<!-- more -->self
: 类自身的类型data_t
: 存储整数的类型mod_t
: 模的类型a
, b
: 类型为 self
的类un
: 一元函数bin
: 二元函数成员函数/友元函数 | 返回类型 | 功能 | 调用后是否改变当前类 |
---|---|---|---|
a.data() / a.data() const |
data_t& |
返回存储的整数 | 否 |
a.get_mod() const |
mod_t |
返回模数 | 否 |
a.no_check_mod() |
self& |
对 a.data() 取模, 不检查正负 |
是 |
a.safe_mod() |
self& |
对 a.data() 取模, 检查正负 |
是 |
a.transform_unary(un) |
self& |
将 a.data() 改为 un(a.data()) , 对结果取模 |
是 |
a.transform_unary_raw(un) |
self& |
将 a.data() 改为 un(a.data()) , 不对结果取模 |
是 |
a.transform_binary(b, bin) |
self& |
将 a.data() 改为 bin(a.data(), b.data()) , 对结果取模 |
是 |
a.transform_binary_raw(b, bin) |
self& |
将 a.data() 改为 bin(a.data(), b.data()) , 不对结果取模 |
是 |
calc_unary(a, un) |
self |
返回存储 un(a.data()) 的类, 对结果取模 |
- |
calc_unary_raw(a, un) |
self |
返回存储 un(a.data()) 的类, 不对结果取模 |
- |
calc_binary(a, b, bin) |
self |
返回存储 bin(a.data(), b.data()) 的类, 对结果取模 |
- |
calc_binary_raw(a, b, bin) |
self |
返回存储 bin(a.data(), b.data()) 的类, 不对结果取模 |
- |
a.inverse() const |
self |
返回 a.data() 模 a.get_mod() 的逆元, 不存在时抛出 std::runtime_error 异常 |
否 |