快速幂和快速幂求逆元

快速幂

利用倍增的思想,将o(n)的时间复杂度优化成o(lgn)

int ksm(int x,int y,int p) {
    int res = 1;
    while (y) {
        if (y & 1)res = (res * x) % p;
        x = (x * x) % p;
        y = y >> 1;
    }
    return res % p;
}

快速幂求逆元

求逆元就是为了把除法转化成乘法,因为乘法可以取模,而除法不行,除***有精度问题,而乘法则不会有这样的问题,要注意,有逆元的情况下是两个数必须要互质(也就是最大公约数为1)

通俗易懂的博客


int ksm(int a, int b,int mod) {
    int res = 1;
    while (b) {
        if (b & 1)res = res * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return res;
}
void solve() {
    int n, m;
    cin >> n >> m;
    cout << ksm(n, m - 2, m) <<endl;
}

全部评论

相关推荐

01-15 19:59
中山大学 C++
牛客60887332...:你这是人写出来的? 本科标到硕士后面 留那么多空给 hr 填?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务