乘法逆元:修订间差异

来自三三百科
跳转到导航 跳转到搜索
33DAI留言 | 贡献
创建页面,内容为“==前置== ===快速幂=== ====递归版==== <syntaxhighlight lang="cpp" line> // a 的 b 次方在模 p 意义下的结果 int quick_pow(int a, int b, int p) { if (b == 0) return 1; int x = quick_pow(a, b / 2, p); if (b % 2 == 0) return x * x % p; return x * x % p * a % p; } </syntaxhighlight> ====非递归版==== <syntaxhighlight lang="cpp" line> // a 的 b 次方在模 p 意义下的结果 int quick_pow(int a, int b, int…”
 
33DAI留言 | 贡献
无编辑摘要
第45行: 第45行:
}
}
</syntaxhighlight>
</syntaxhighlight>
[[分类:代码模板]]

2026年2月6日 (五) 02:19的版本

前置

快速幂

递归版

// a 的 b 次方在模 p 意义下的结果
int quick_pow(int a, int b, int p)
{
    if (b == 0)
        return 1;
    int x = quick_pow(a, b / 2, p);
    if (b % 2 == 0)
        return x * x % p;
    return x * x % p * a % p;
}

非递归版

// a 的 b 次方在模 p 意义下的结果
int quick_pow(int a, int b, int p)
{
    int res = 1;
    while (b > 0)
    {
        if (b % 2 == 1)
            res = res * a % p;
        b /= 2;
        a = a * a % p;
    }
    return res;
}

费马小定理求逆元

// a 在模 p(质数) 意义下的逆元
int inv(int a, int p)
{
    return quick_pow(a, p - 2, p);
}