![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论算法
1101010101
这个作者很懒,什么都没留下…
展开
-
Greatest Common Divisor 欧几里得算法(最大公约数)
欧几里得算法的核心就是辗转相除法,其优点在于只需要选取其余数进行相应的计算就可以直接得到最大公约数。其复杂度为o(log(n))。int GCD(int x, int y){ int t; while (y > 0) { t = x%y; x = y; y = t; } return x;}原创 2017-07-16 16:21:04 · 537 阅读 · 0 评论 -
Prime 素数判断
在日常做题或其他方面又需要判断素数时,一个简单好用的判断模板就很舒服了,下面不加证明直接给出模板bool is_prime(int u){ if (u == 0 || u == 1) return false; if (u == 2) return true; if (u % 2 == 0) return false; for (int i = 3;原创 2017-07-16 16:34:27 · 1857 阅读 · 0 评论 -
Sieve Prime 素数筛法
一开始,我们假设所有的数都是素数,那么当我们找到一个素数时,我们把其平方后的数以及不断加上这个数本身的所有数认为是合数。由此可以得出下面的算法const int M = 1000; //,:sizebool mark[M];//true:prime numbervoid sieve_prime(){ memset(mark, true, sizeof(mark)); mark[0原创 2017-07-16 16:40:17 · 1249 阅读 · 1 评论 -
Mdular Linear Equatin 模线性方程(同余方程)
//如果GCD(a,b)不能整除c,则ax + by = c 没有整数解//ax≡b(mod n) (n>0)//上式等价于二元一次方程ax - ny = bvoid modular_linear_equation(int a, int b, int n){ int d, x, y, x0, gcd; //可以减少扩展欧几里得溢出的可能 gcd = GCD(a, n); if (原创 2017-07-17 19:12:45 · 359 阅读 · 0 评论 -
Extended Euclid 拓展欧几里得算法
扩展欧几里德算法是用来在已知a, b求解一组x,y [x,y都是整数],使它们满足贝祖等式: ax+by = gcd(a, b) =d(解一定存在,根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及方程组中。原创 2018-06-21 15:05:39 · 1033 阅读 · 0 评论