代码均未经过编译!!!(不用编译啦)
默认:
#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;
}
数论知识整理
原文地址:https://www.cnblogs.com/xht37/p/10217406.html
时间: 2024-11-13 04:18:42