算法
onestow
这个作者很懒,什么都没留下…
展开
-
模数非互质的同余方程组(非互质版中国剩余定理)
之前介绍到的中国剩余定理只能求解模数两两互质的同余方程组。 那么,模数如果不一定两两互质的情况应该怎么求呢? 下面介绍通过合并方程的方法来解决问题(要用到扩展欧几里德算法)。 顾名思义,合并方程就是把所有的同余方程组合并成一个。 举个例子,合并同余方程组 x%A=a ① x%B=b ②原创 2013-07-31 22:19:43 · 2558 阅读 · 0 评论 -
中国剩余定理
用来求解模数互质的同余方程组, 即求一个数x,使得x除以n个模数分别为a1,a2,a3……an(注意这里的除数必须要两两互质)得到n个余数r1,r2,r3……rk。求这个数x.中国剩余定理求的就是这个数x。 求解过程: 1)令p=a1*s2*a3*……*an,ki=p/ai (i从1到n)。 2)我们要找到这样的数 di%ki==0且di%ai==ri (i从1原创 2013-07-31 22:18:53 · 721 阅读 · 0 评论 -
快速幂取模
基于二分及位操作,用来快速求a的n次方对M取模,时间复杂度为O(logn)相比常规方法O(n)有极大提升代码:typedef long long LL;递归:LL emo(LL a,LL n,LL M) //计算a^n%M{ if(n==0) return 1; if(n==1) return a%M; LL t=emo(a,n>>1,原创 2013-07-31 15:44:49 · 424 阅读 · 0 评论 -
扩展欧几里德算法的定义、解释、证明及其应用
定义: 对于不完全为0的两个整数a,b,gcd(a,b)表示a,b的最大公约数 则必然存在整数对x,y,使得gcd(a,b)=ax+by。 (由数论中的相关定理可知,至于这个相关定理是什么,我也不清楚我也不深究这个)解法及证明: ①显然当b=0时,有x=1,y=0。 由欧几里德算法我们知道gcd(a,b)=gcd(b,a%b)(PS:%为求余运算符)原创 2013-07-31 22:17:44 · 651 阅读 · 0 评论 -
POJ2411(状态压缩DP)
#include #include long long dp[12][2050];int ms,h,w;bool check(int x){while(x){if((x&3)==3) x=x>>2;else if(x&1) return 0;else x=x>>1;}return 1;}int main(){while(scanf("%d原创 2014-08-31 13:47:32 · 434 阅读 · 0 评论 -
HDU1518 dfs+剪枝
#include #include #include int n,a[25],e;bool b[25];bool dfs(int curLen,int cure,int curStick){ if(cure==4) return 1; if(curLen==e) return dfs(0,cure+1,0); for(int i=curStick;i<n;++i) //之原创 2014-09-23 11:00:30 · 386 阅读 · 0 评论 -
线性时间找第K小的数
用了快排的思想,区别是快原创 2014-09-01 21:40:09 · 711 阅读 · 0 评论 -
HDU1269(Tarjan算法)
对于Tarjan算法的个人理解对于图G的n个顶点,原创 2014-10-14 10:32:55 · 408 阅读 · 0 评论 -
HDU2063(匈牙利算法)
不断寻找增广路,每找到一条增广路,匹配数加1原创 2014-10-16 12:28:19 · 441 阅读 · 0 评论