逐步更新:
皮克公式:
给定顶点均是整点(或正方形格点)的简单多边形,皮克定理说明了其面积S和内部格点a,边上格点数目b的关系:
S=a + b/2 -1;
(其中a表示多边形内部的点数,b表示多边形边界上的点数,S表示多边形
的面积)
gcd与lcm:
lcm(a,b)=a*b/gcd(a,b);
g(a,b)为最大公约数
因为a=gcd(a,b)*i; b=gcd(a,b)*j;
最小公倍数为gcd(a,b)*i*j
求gcd:
long long gcd(long long a,long long b)
{
if(b==0) return a;
return gcd(b,a%b);
}
扩展欧几里得算法:
二元一次方程整数解存在的条件:在整系数方程ax+by=c中,
若a,b的最大公约数能整除c,则方程有整数解。即
如果(a,b)|c 则方程ax+by=c有整数解
显然a,b互质时一定有整数解。
例如方程3x+5y=1, 5x-2y=7, 9x+3y=6都有整数解。
返过来也成立,方程9x+3y=10和 4x-2y=1都没有整数解,
∵(9,3)=3,而3不能整除10;(4,2)=2,而2不能整除1。
一般我们在正整数集合里研究公约数,(a,b)中的a,b实为它们的绝对值。
证明:例ax+by=c
证明很简单,由于a%gcd(a,b)==b%gcd(a,b)==0,所以a*x+b*y肯定能够整除gcd(a,b),如果线性方程成立,那么就可以用m代替a*x+b*y,从而得到上面的结论,利用上面的结论就可以用来判断一个线性方程是否有解。
扩展欧几里德算法:扩展欧几里得算法(又称扩充欧几里得算法)是用来解某一类特定的不定方程的一种方法,常用用来求解模线性方程及方程组。扩展的欧几里得算法可以用来计算模逆元,而模逆元在公钥密码学中占有举足轻重的地位。[6-7]
基本算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by。
证明:设 a>b。
1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0;
2,ab≠0 时
设 ax1+by1=gcd(a,b);
bx2+(a mod b)y2=gcd(b,a mod b);
根据朴素的欧几里德原理有 gcd(a,b)=gcd(b,a mod b);
则:ax1+by1=bx2+(a mod b)y2;
即:ax1+by1=bx2+(a-(a/b)*b)y2=ay2+bx2-(a/b)*by2;
根据恒等定理得:x1=y2; y1=x2-(a/b)*y2;
这样我们就得到了求解 x1,y1 的方法:x1,y1 的值基于 x2,y2.
上面的思想是以递归定义的,因为 gcd 不断的递归求解一定会有个时候 b=0,所以递归可以结束。[8]
View Code
floor函数与ceil函数 :
floor(x),有时候也写做Floor(x),其功能是“下取整”,或者说“向下舍入”,即取不大于x的最大整数,如x=3.14,floor(x)=3。
ceil函数的作用是求不小于给定实数的最小整数。如ceil(2)=ceil(1.2)=cei(1.5)=2.00
使用该函数需要包含头文件<math.h>,该函数返回值为double型注意:据权威资料显示,floor函数与ceil函数的返回值均为double型
-------------------
同余:若若a==b(modk);//在这里的==指的是同余,=表示相等
即a-b=kt(t为整数) ,同上原理若a (mod k)=b->a-b=kt (t为整数)。
费马小定理: 假如p是质数,且(a,p)=1,那么 a^(p-1) ≡1(mod p)