[HAOI2011]向量

题目

k(a,b)+q(b,a)+w(a,b)+c(b,a)=(x,y)
(k+w)a+(q+c)b=x
(kw)b+(qc)a=y
裴蜀定理:若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立。
可得x+y=c
x和y有整数解条件是 gcd(a,b)|c
证明:令a=gcd(a,b),b=gcd(a,b)
原式=(px+qy)gcd(a,b)
  =c
因为gcd(a,b)为整数,要使x和y为整数,gcd(a,b)|c。
(k+w)a+(q+c)b=x
(kw)b+(qc)a=y
(k+w),(q+c),(k-w),(q-c)均为整数的条件是gcd(a,b)|xgcd(a,b)|y
但(k+w),(k-w)有整数解不一定k和w有整数解 q+c和q-c是同理的
(k+w)=f,(kw)=g
k=(f+g)/2,w=(fg)/2
 
因为2|(f+g)2|(fg)要使kw均为整数则fg均为偶数或奇数
 
#include<bits/stdc++.h>
using namespace std;
long long T,a,b,x,y,k;
inline bool pd(long long x,long long y){
    if (x%k==0&&y%k==0)
        return true;
    else 
        return false;
}
int main(){
    scanf("%lld",&T);
    while (T--){
        scanf("%lld%lld%lld%lld",&a,&b,&x,&y);
        k=__gcd(a,b)*2;
        if (pd(x,y)||pd(x+a,y+b)||pd(x+b,y+a)||pd(x+a+b,y+a+b))
            printf("Y\n");
        else 
            printf("N\n");
        //printf("%d",k);
    }
    return 0;
}

  

posted @ 2019-02-25 14:21  Trimsteanima  阅读(82)  评论(0编辑  收藏  举报
Live2D