gcd的推论,多个数的gcd的转化
(gcd(a,b,c,d)=gcd(a,a-b,b-c,c-d))
证明如下:
-
先证(gcd(a,b,c,d)<=gcd(a,a-b,b-c,c-d))
设(k=gcd(a,b,c,d))
若(k|a,k|b),则有(k|a-b)
同理可得(k|b-c),(k|c-d)
所以k是a,a-b,b-c,c-d这四个数的公共因子,但不一定是最大的
-
再证(gcd(a,b,c,d)>=gcd(a,a-b,b-c,c-d))
设(k=gcd(a,a-b,b-c,c-d))
若(k|a,k|a-b),则有(k|a-(a-b))
所以有k|b
同理可得(k|c),(k|d)
所以k是a,b,c,d这四个数的公共因子,但不一定是最大的
-
因为这两者关系同时存在,故而只有一种可能
(gcd(a,b,c,d)=gcd(a,a-b,b-c,c-d))
得证
其他
- 该推论的应用,该推论将原本的数字转成了差分形式,因而可以结合差分的性质一起使用。
- 由于gcd函数的设置可以让某个数和0gcd,从而返回自身
long long gcd(long long a,long long b) { return b?gcd(b,a%b):a; }