Polycarp remembered the 2020-th year, and he is happy with the arrival of the new 2021-th year. To remember such a wonderful moment, Polycarp wants to represent the number n as the sum of a certain number of 2020 and a certain number of 2021.
For example, if:
n=4041, then the number n can be represented as the sum 2020+2021;
n=4042, then the number n can be represented as the sum 2021+2021;
n=8081, then the number n can be represented as the sum 2020+2020+2020+2021;
n=8079, then the number n cannot be represented as the sum of the numbers 2020 and 2021.
Help Polycarp to find out whether the number n can be represented as the sum of a certain number of numbers 2020 and a certain number of numbers 2021.
Input
The first line contains one integer t (1≤t≤104) — the number of test cases. Then t test cases follow.
Each test case contains one integer n (1≤n≤106) — the number that Polycarp wants to represent as the sum of the numbers 2020 and 2021.
Output
For each test case, output on a separate line:
“YES” if the number n is representable as the sum of a certain number of 2020 and a certain number of 2021;
“NO” otherwise.
You can output “YES” and “NO” in any case (for example, the strings yEs, yes, Yes and YES will be recognized as positive).
Example
Input:
5
1
4041
4042
8081
8079
Output:
NO
YES
YES
YES
NO
题目描述
输入一个数,判断它是否能由有限个2020和2021进行相加得到。
分析
由题意,设x跟y为2020跟2021的数量
可列 n = 2020x + 2021y
即 n = 2020*(x+y) + y
如果n能由有限个2020和2021进行相加得到,则求得的x跟y为>=0的整数
首先,先使n余2020得到y
然后利用上述式子求出x,用int类型接收,再最后相乘得看是否是n即可。(此步是用于判断求得的x是否是整数,不是整数的话最后相乘的结果就不是n)
AC代码
#include <iostream>
#include <cstdio>
using namespace std;
int main(void)
{
int t;
scanf("%d", &t);
int n;
while (t--)
{
scanf("%d", &n);
int count2021 = n % 2020;
int count2020 = (n - count2021) / 2020 - count2021;
if (count2020 >= 0 && 2020 * count2020 + 2021 * count2021 == n) {
puts("YES");
}
else puts("NO");
}
return 0;
}