数论知识整理

Posted xht37

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数论知识整理相关的知识,希望对你有一定的参考价值。

代码均未经过编译!!!(不用编译啦)

默认:

#define ll long long

快速幂

正整数a,b,p,求a^b(mod p)的值,时间复杂度O(logb)

ll ksm(ll a, ll b, ll p) {
    ll c = 1 % p;
    a %= p;
    while (b) {
        if (b & 1) c = c * a % p;
        a = a * a % p;
        b >>= 1;
    }
    return c;
}

最大公约数

正整数a,b,求a,b的最大公约数,时间复杂度在log级别

ll gcd(ll a, ll b) {
    return b ? gcd(b, a % b) : a;
}

最小公倍数

正整数a,b,求a,b的最小公倍数,时间复杂度在log级别

ll lcm(ll a, ll b) {
    return a * b / gcd(a, b);
}

扩展欧几里得算法

正整数a,b,求ax+by=gcd(a,b)一组解,同时返回gcd(a,b),时间复杂度在log级别

ll exgcd(ll a, ll b, ll &x, ll &y) {
    if (!b) {
        x = 1;
        y = 0;
        return a;
    }
    ll d = exgcd(b, a % b, x, y), z = x;
    x = y;
    y = z - a / b * y;
    return d;
}

正整数a,b,c,求a*x≡c(mod b)一组解,无解返回“-1”,时间复杂度在log级别

ll work(ll a, ll b, ll c) {
    ll x, y, d = exgcd(a, b, x, y);
    if (c % d) return -1;
    return c / d * x;
}

以上是关于数论知识整理的主要内容,如果未能解决你的问题,请参考以下文章

数论代码整理

浴谷夏令营2017.8.1数论的整理

JSP页面开发知识点整理

PAT 数列的片段和简单数论

专题数论

IOS开发-OC学习-常用功能代码片段整理