三的倍数判断条件:数位相加的和是否为三的倍数
证明:
abcabc
=a100+b10+c=a*100+b*10+c
=a99+b9+a+b+c=a*99+b*9+a+b+c
显然,a99+b9a*99+b*9是3的倍数,那么只需要判断a+b+ca+b+c是否是3的倍数即可
即:i=1n10i1xii=1nxi(mod\sum_{i = 1}^n{10^{i-1}*x_i}≡\sum_{i=1}^n{x_i}(mod 3)3)
所以我们将llrr的数字全部累加对三取余等价于根据题意组成的数字取余
因为我们可以将题意组成的数字写成llrr的数字乘10i10^i相加得到,然后将每个数字提出,前半部分会变成(10i1)aj(10^i-1)*a_j,显然这个数字是三的倍数,所以判断提取的数字和是否为三的倍数即可。
AC代码

#include <bits/stdc++.h>
using namespace std;
int main(void)
{
    int t;
    cin >> t;
    while (t--)
    {
        long long l, r;
        cin >> l >> r;
        if ((l + r) % 3 == 0 || (r - l + 1) % 3 == 0)
            cout << "YES" << endl;
        else
            cout << "NO" << endl;
    }
}