Problem - E - Codeforces
( n % k )个( ⌊ n k ⌋ + 1 )和( k − n % k )个( ⌊ n k ⌋ )是否能组成( ⌊ n 2 ⌋ )和( n − ⌊ n 2 ⌋ )的问题 (n ~\% ~k ~)个(\left \lfloor \frac{n}{k} \right \rfloor +1)和(k-n~\%~k)个(\left \lfloor \frac{n}{k} \right \rfloor)是否能组成(\left \lfloor \frac{n}{2} \right \rfloor)和(n - \left \lfloor \frac{n}{2} \right \rfloor)的问题 (n % k )个(⌊kn⌋+1)和(k−n % k)个(⌊kn⌋)是否能组成(⌊2n⌋)和(n−⌊2n⌋)的问题
( ⌊ n k ⌋ + 1 ) ∗ x + ( ⌊ n k ⌋ ) ∗ y = ( ⌊ n 2 ⌋ ) (\left \lfloor \frac{n}{k} \right \rfloor +1)*x~+~(\left \lfloor \frac{n}{k} \right \rfloor)*y = (\left \lfloor \frac{n}{2} \right \rfloor) (⌊kn⌋+1)∗x + (⌊kn⌋)∗y=(⌊2n⌋)
x = x 0 ∗ c g c d ( a , b ) + k ∗ b g c d ( a , b ) x=x_0*{c\over gcd(a,b)}+{k*b\over gcd(a,b)} x=x0∗gcd(a,b)c+gcd(a,b)k∗b
y = y 0 ∗ c g c d ( a , b ) − k ∗ a g c d ( a , b ) y=y_0*{c\over gcd(a,b)}-{k*a\over gcd(a,b)} y=y0∗gcd(a,b)c−gcd(a,b)k∗a
#include
using namespace std;
#define fi first
#define se second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
const int N = 2e6 + 10;
const int mod = 1e9 + 7;
typedef pair<int,int>PII;
int n , t , k;
int exgcd(int a , int b , int &x , int &y){
if(b == 0){ x = 1; y = 0; return a;}
int g = exgcd(b , a % b , y , x);
y -= a / b * x;
return g;
}
signed main(){
IOS
cin >> t;
while(t --){
cin >> n >> k;
if(n % k == 0){
int num = n / k , od , ev;
ev = n / 2;
od = n - ev;
if(ev % num == 0 && od % num == 0){
cout << "Yes" << "\n";
}else{
cout << "No" << "\n";
}
}else{
int a = n / k , b = n / k + 1 , c = n / 2;
int cntb = n % k , cnta = k - n % k;
int x , y , gcds;
gcds = exgcd(a , b , x , y);
a /= gcds;b /= gcds;c /= gcds;
int k1_max = floor((double)(cnta - x * c) / (double) b);
int k1_min = ceil((double)(0 - x * c) / (double) b);
int k2_max = floor((double)(y * c) / (double) a);
int k2_min = ceil((double)(y * c - cntb) / (double) a);
if(k1_min > k1_max || k2_min > k2_max){
cout << "No\n";
}else{
if(min(k2_max , k1_max) >= max(k1_min , k2_min)){
cout << "Yes\n";
}else{
cout << "No\n";
}
}
}
}
return 0;
}
//freopen("文件名.in","r",stdin);
//freopen("文件名.out","w",stdout);