![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
驶向遥远天边的帆船
计算机在校生
展开
-
无穷大常量0x7fffffff 0x3fffffff 0x3f3f3f3f
int型变量的取值范围:[-2^31, 2^31 - 1] -> [-2147483648, 2147483647]0x7fffffff = 2147483647 = (2^31 - 1) = (1 << 31) - 10x3fffffff = 1073741823 = (2^30 - 1) = (1 << 30) - 10x3f3f3f3f = 1061109567在写原创 2020-10-10 21:04:52 · 4230 阅读 · 1 评论 -
素数的判断方法:暴力求解,埃氏筛法,欧拉筛法
判断一个数是否为素数素数也称质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。暴力求解bool isPrime(int n) { //1不是素数 if (n <= 1) return false; for (int i = 2; i * i <= n; i++) if (n % i == 0) return false; return true;}注意,如果n接近int型原创 2020-08-21 20:22:34 · 327 阅读 · 1 评论 -
乘法逆元 -- 模运算不满足分配律
乘法逆元(a + b) % p = (a % p + b % p) % p(a - b) % p = (a % p - b % p) % p(a * b) % p = (a % p * b % p) % p(a / b) % p != (a % p / b % p) % p数学家们无法忍受除法求模时不能满足分配律,于是定义了乘法逆元定义: 若在(mod p)的意义下,对于一个整数a,有a∗x≡1(modp)a * x \equiv 1(mod p)a∗x≡1(modp),即(a*x原创 2020-08-18 14:36:10 · 894 阅读 · 2 评论 -
使用费马小定理求解逆元
费马小定理费马小定理:假如a是一个整数,p是一个质数,那么如果b是p的倍数,bp≡b(modp)b^p \equiv b(mod p)bp≡b(modp)如果b不是p的倍数,bp−1≡1(modp)b^{p - 1} \equiv 1(mod p)bp−1≡1(modp)同余式:a≡b(modp)a \equiv b(mod p)a≡b(modp)表示a和b对模p同余,即 正整数a - b能被p整除,(a−b)%p=0(a - b) \% p = 0(a−b)%p=0证明:略使用费马原创 2020-08-18 14:30:37 · 1122 阅读 · 1 评论 -
使用扩展欧几里得算法对逆元求解
扩展欧几里得算法求逆元解方程 ax + by = gcd(a, b)在欧几里得算法中通过定理gcd(a, b) = gcd(b, a%b),我们使用递归求得a与b的最大公约数,在递归边界当b = 0时,a = gcd(a, b),此时显然有a * 1 + b * 0 = gcd。对于这样的一个式子,我们能否对它进行推广呢?在递归的其中一步,通过相关定理(此处不叙述)可知 ax1+by1=gcd(a,b)ax_1 + by_1 = gcd(a, b)ax1+by1=gcd(a,b)中解x1、y1x原创 2020-08-18 14:28:46 · 1048 阅读 · 0 评论 -
递推打表求逆元
递推打表求逆元目的:预先得到在(mod m)的意义下的2 - n分别对应的逆元inv[n]得到递推表达式:任取一个同余式ax≡c(modm)ax \equiv c(mod m)ax≡c(modm)一定存在y使得ax−c=myax - c = myax−c=my根据定义c×(c的逆元)≡1(modm)c \times (c的逆元) \equiv 1(mod m)c×(c的逆元)≡1(modm),所以c∗inv[c]≡1(modm)c * inv[c] \equiv 1(mod m)c∗inv[c原创 2020-08-18 14:22:17 · 166 阅读 · 0 评论 -
欧几里得算法求最大公约数,最小公倍数
欧几里得算法最大公约数最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个,a,b的最大公约数记为(a,b)。求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。常用的是辗转相除法,也叫欧几里得算法其计算原理依赖于下面的定理:定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。最大公约数(Greatest Common Divisor)缩写为GCDgcd(a, b) = gcd(b, a mod b)证明:gcd(a,原创 2020-08-18 14:18:32 · 1478 阅读 · 0 评论 -
递归实现快速幂
快速幂aba^bablong long Pow(long long a, long long b) { long long ans = 1; for (int i = 0; i < b; i++) ans = ans * a; return ans;}由于指数爆炸的原因,所以题目一般求ab%moda^b \% modab%mod;使用快速幂可以更快的求出结果,它基于二分的思想,所以也称为二分幂:如果b是奇数,有ab=a∗ab−1a^b = a原创 2020-08-18 14:13:11 · 391 阅读 · 0 评论