定理:对于给定的正整数a、b,具有方程解的充分条件是c是gcd(a,b )的整数倍
证明:
充分性的证明:
设gcd(a,b )=d,其中k1、k2相互为素
那么,原等式,也就是说,等价于其中k1、k2相互为素
那么,该方程式与模线性方程式等价,从扩展gcd中可以看出,该方程式中一定有解
这个方程的一组解就是原方程的解
必要性的证明:
采用反证法,假设c不是gcd(a,b )的倍数,为:
设置
那么,如下。
两边同时除以d,得到以下结果。
k1、x、k2、y、k3都是整数,显然不是整数,所以原方程无法求解
因为这和方程式矛盾,所以c一定是gcd(a,b )的倍数
定理的推广:
具有方程式(这里,a,b,c .n,f为整数)解的充分条件,f为gcd(a,b,c,n )的整数倍
定理的应用:
给出某个序列(an ),为了使值最小,求出整数序列) bn ),并求出其最小值
解:随着典雅玉米定理的推广,原表达式的最小值为gcd(a1,a2.an )
代码(luogu4549 ) :
# include cstdio # include cmath # include cstring # includecstdlib # include iostream # include algorithm # include queue # inclue intgcd(intx,int y ) if ) y==0) { return x; }returngcd(y,x%y ); (}int main ) (/Freopen ) ) min.in,) r,stdin ); //freopen(min.out,) w,stdout ); scanf('%d ',n ); int ans=0; for(intI=1; i=n; I ) { int x; scanf('%d ',x ); x=ABS(x; if(x==0) { continue; }ans=gcd(x,ans ); }printf('%dn”,ans ); 返回0; }