You are given two integers and . Your task is to find if can be represented as a sum of distinct positive odd (not divisible by ) integers or not.
You have to answer independent test cases.
Input
The first line of the input contains one integer () — the number of test cases.
The next lines describe test cases. The only line of the test case contains two integers and ().
Output
For each test case, print the answer — “YES” (without quotes) if can be represented as a sum of distinct positive odd (not divisible by ) integers and “NO” otherwise.
Example
input
6 3 1 4 2 10 3 10 2 16 4 16 5
output
YES YES NO YES YES NO
Note
In the first test case, you can represent as .
In the second test case, the only way to represent is .
In the third test case, you cannot represent as the sum of three distinct positive odd integers.
In the fourth test case, you can represent as , for example.
In the fifth test case, you can represent as .
In the sixth test case, you cannot represent as the sum of five distinct positive odd integers.
Solution:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int i=n-1;i>=a;i--) #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #define se second #define SZ(x) ((int)(x).size()) typedef vector< int > VI; typedef long long ll; typedef pair< int , int > PII; typedef double db; mt19937 mrand(random_device{}()); const ll mod=1000000007; int rnd( int x) { return mrand() % x;} ll powmod(ll a,ll b) {ll res=1;a%=mod; assert (b>=0); for (;b;b>>=1){ if (b&1)res=res*a%mod;a=a*a%mod;} return res;} ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;} // head int _; int main() { for ( scanf ( "%d" ,&_);_;_--) { ll n,k; scanf ( "%lld%lld" ,&n,&k); if (n<k*k||(n-k)%2!=0) puts ( "NO" ); else puts ( "YES" ); } } |