![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论
文章平均质量分 72
iwtwiioi_2
闪耀无比灿烂的光芒,超越极点。
与其做一棵绿洲上的小草,不如做一棵沙漠中的大树。
展开
-
【wikioi】1012 最大公约数和最小公倍数问题
题目链接 算法:数论(辗转相除) gcd(a, b)是a和b最小公倍数, lcm(a, b)是a和b的最大公倍数 gcd(a, b) == gcd(b, a%b) lcm(a, b) == a/gcd(a, b)*b //不用a*b/gcd(a,b)是为了防止溢出 一般枚举算法 //暴力枚举即可 //只不过gcd(a, b) == gcd(b, a%b); lcm(a,原创 2013-10-20 15:58:50 · 818 阅读 · 0 评论 -
1^b+2^b+3^b+...+n^b数列
(听说高中有,但是我还没看,所以就自己推了下) 要算b次的,那么就要先算b+1次的。 首先,我用F(i, j)表示杨辉三角第i层第j个,即(a+b)^(i-1),i>1的展开各项系数 第1层:1 第2层:1 1 ((a+b)^1) 第3层:1 2 1 ((a+b)^2) 第4层:1 3 3 1 ((a+b)^3) .... 那么,(n+1)^b展原创 2013-11-02 19:05:48 · 1235 阅读 · 1 评论 -
快速幂
其实很好理解的,O(lg b)的时间复杂度,b是指数 点我打开百科链接 我就大概说一下。 如果b = 11, 那么对应的二进制为1011,即答案 11的二进制是1011 11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1 那么就刚好一一对应 上代码(如果没有mod,数据很大,就要开高精度): unsiged long long fastpow(unsigned原创 2013-11-03 16:16:30 · 420 阅读 · 0 评论 -
最大公倍数和最小公倍数
最大公约数(欧几里德算法or辗转相除法) 我们用gcd(a, b)表示a和b的最大公约数,那么 gcd(a, b) = gcd(b, a%b) 时间复杂度: O(lgb) 具体证明很多的,百度即可。 代码: int gcd(int a, int b) { return (b?gcd(b, a%b):a); } (非递归版自己推) 最小公倍数: 我们用lcm(a,原创 2013-11-04 12:17:23 · 829 阅读 · 0 评论 -
分解质因数和求因数个数
一个正整数N>1,必定可以分解为若干质因数相乘,即N=2^x1*3^x2*...*prime^xi,prime 分解时一步步求N mod i , 2 代码: int i = 1; while(n > 1) { i++; while(!(n % i)) //要一直分解下去 { n /= i; cout << i; if(n != 1) cout << "*"; } }原创 2013-11-05 18:41:50 · 4685 阅读 · 0 评论 -
筛质数
常用的有2种算法,分别有不同的用途。 1、暴力枚举 O(sqrt(n)) 常用于判断单个或少量数是否质数 2、一般的线性筛 O(n^2) 常数挺小,常用于O(1)查找是否质数,但需要开O(n)大小的数组 3、快速线性筛(欧拉筛) O(n),虽然代码表面上看起来时间复杂度并不是O(n) 实现: 1、暴力枚举 代码: ok = 1; for(i = 2; i <= sqrt(n)原创 2013-11-05 23:10:31 · 746 阅读 · 0 评论