:费马小定理是数论中的一个重要定理,其内容为: 假如p是质数,且gcd(a,p)=1,那么 a^(p-1) ≡1(mod p) 假如p是质数,且a,p互质,那么 a的(p-1)次方除以p的余数恒等于1。
:对于两个整数a,b,a/b是整数,且a和b除以mod得余数分别为aa,bb,则a/b除以mod得余数为(aa*bb^(-1))%mod,其中b^(-1)是b的逆.
(当(a*b)%mod=1是,我们称a和b互为乘法的逆,即a=b^(-1),b=a^(-1))
相关代码:
void gcd(LL a,LL b,LL &d,LL &x,LL &y)//拓展欧几里得定理,求ax+by=gcd(a,b)的一组解
{
if(!b){d=a;x=1;y=0;}
else{gcd(b,a%b,d,y,x);y-=x*(a/b);}
}
LL inv(LL a,LL n)//求得a在模n条件下的逆
{
LL d,x,y;
gcd(a,n,d,x,y);
return d==1?(x+n)%n:-1;
}
推论1:mod为质数,由费马小定理得b^(mod-1)%mod=1-->(b*b^(mod-2))%mod=-1,所以b的逆=b^(mod-2).
对于整数a,b(b
组合游戏:一个状态是必败状态当且仅当它的所有后继都是必败状态;一个状态是必胜条件当且仅当它至少有一个后继是必败状态
组合游戏的和。假设有k个组合游戏G1,G2,...Gk,可以定义一个新游戏,在每个回合中,
当前游戏可以任选一个子游戏Gi进行一次合法操作,而让其他游戏的局面保持不变,不鞥操作的游戏者输。
这个新游戏称为G1,G2,...,G3的和
SG函数和SG定理。对于任意状态x,定义SG(x)=mex(S),其中S是x的后继状态的SG函数值集合,mex(S)表示不在S内的最小非负
整数。SG(x)当且仅当x为必败状态.游戏和的SG函数SG函数等于各子游戏SG函数的Nim和。
Bouton定理:状态(x1,x2,x3)为必败状态当且仅当x1^x2^x3=0,称为Nim和。可看做SG定理在Nim游戏中的运用
例子:UVALive/LA 5059+UVA 10561+UVA 12293
给定一个顶点均为整点(即坐标为整数的点)的简单多边形,其面积A和内部格点数目I与边上格点数目B的关系式:A=I+B/2-1.
例子:poj 3146
a^(phi(n))≡1(mod n) (a,n互质), phi(n)是欧拉函数,表示不超过n的且与n互质的数的个数。
例子:hdu3307
可用于生成函数(母函数):
(1-x-x^2+x^5+x^7-x^12...)(1+p(1)x+p(2)x^2+p(3)x^3)=1;(整数划分的生成函数为1/∏(1-x^i))
得到p(n)=p(n-1)+p(n-2)-p(n-5)-p(n-7)+...
资料源自:http://zh.wikipedia.org/wiki/%E8%A6%86%E7%9B%96_(%E5%9B%BE%E8%AE%BA)
http://baike.baidu.com/link?url=5gWVO-A8T_AUGw21_P85QiijE7T934ecsDq-50f8SMh02Vpd1tIuTSgjD4cS922u
图G的顶点覆盖是一个顶点集合V,使得G中的每一条边都接触V中的至少一个顶点。我们称集合V覆盖了G的边。最小顶点覆盖是用最少的顶点来覆盖所有的边。顶点覆盖数是最小顶点覆盖的大小。
二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i ∈A,j ∈ B),则称图G为一个二分图。
无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数。
匈牙利算法:它是一种用增广路径求二分图最大匹配的算法。
http://baike.baidu.com/link?url=1U3pNCTlWDbUG1A-YexAqNo_D_1rpFEKBO7IBcjq7d3_MY7MwhCAxeF5MnXW4O-5
int find(int cur) //判断增广路是否存在
{
int i, k;
for(i = 0; i < map[cur].size(); i++)
{
k = map[cur][i];
if(!flag[k])
{
flag[k] = true;
if(pre[k] == -1 || find(pre[k]))
{
pre[k] = cur;
return 1;
}
}
}
return 0;
}
for(i = 0; i < n; i++)
{
memset(flag, false, sizeof(flag));
sum += find(i);
}
柯尼希定理是这样一个定理:二分图最小点覆盖的点数=最大匹配数。
poj 3041;poj1422,2239,1422,1325,1719,2594,2195,2446,1904,3342,3216,3020
一个PXP的有向图中,路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,
且任何一个顶点有且只有一条路径与之关联;(如果把这些路径中的每条路径从它的起始点走到它的终点,
那么恰好可以经过图中的每个顶点一次且仅一次);如果不考虑图中存在回路,那么每条路径就是一个弱连通子集
最小路径覆盖的边数=顶点数n-最大匹配数
最大独立集:在二分图G中,点集合M,M中的各个点都不相连,则称M为G的独立集。M中点个数最多的称为最大独立集
最大独立集=最小路径覆盖=n-最大匹配数
例:(1,3),(3,4),(2,3),对于无向图,可以得到两种二分图:
1.(1-3,4-3,2-3),求得最大匹配为m=1,即为最小顶点覆盖数,最大独立集=n-m
2.(1-3,3-1,4-3,3-4,2-3,3-2),求得最大匹配m=2,即为最小顶点覆盖数*2,最大独立集=n-m/2
有向图:
(1-3,2-3,3-4),最大匹配为m=2,最小路径覆盖=n-m;