
2018-02-假期训练
文章平均质量分 56
LBJHan
经历过就是财富
展开
-
欧几里得算法(辗转相除)&扩展欧几里得
欧几里得算法是用来计算两个数的最大公约数;int GCD(int a, int b)//注意此处a>b; { return b==0?a:gcd(b, a%b); }应用:一:最常见的,用来求最小公倍数(LCM); LCM=a/GCD(a, b)*b;二:扩展欧几里得算法, 求二元一次方程(a*x+b*y=c)的解;二元一次方程性质:(a*x+b*y=c)有解(整数解)...原创 2018-02-10 08:19:26 · 457 阅读 · 0 评论 -
归并排序&逆序数的nlogn算法
首先说一下归并排序, 时间复杂度nlogn, 将一段数, 分成小段排序, 再合并排序;void Mergesort(vector<int> &a, int left, int right, int mid){ vector<int> b; int i, j, k; i=left, j=mid+1, k=0; while(i<=m...原创 2018-02-10 09:37:05 · 774 阅读 · 0 评论 -
高精度乘法
高精度乘法也就是大数乘法, 到数字超过long long后就需要用数组存数了, 此时数的加减乘除就无法直接计算, 今天就写一写乘法运算;void high_precisionMultiplication(string a, string b)//a, b表示两个因子; { vector<int> factor_a, factor_b, product; int len_...原创 2018-02-10 12:57:31 · 235 阅读 · 0 评论 -
快速幂&矩阵快速幂
快速幂:我的理解就是可以快速的计算a^b; 而这里所用的方法涉及到了二进制;如:2^11: 11的二进制值数是1011, 那么11可以写成1*2^3+0*2^2+1*2^1+1*2^0, 即:8+0+2+1=11;因此, 2^11=2^(8+2+1)=2^8*2^2*2^1; 很明显, 前者需要连续乘11个2, 后者只需运算3次;int power(int a, int b){ int a...原创 2018-02-25 10:13:26 · 306 阅读 · 0 评论 -
二分&三分
不管二分也好, 三分也罢, 所应用的都是有序的数列;二分, 数列要单调;三分数列是抛物线;int erfen(int l, int r, int object, int *a){//(a是单调递增数列); while(l<r){ int mid=(l+r)/2; if(a[mid]<=object) l=mid; else r=m...原创 2018-02-25 10:50:58 · 195 阅读 · 0 评论