混牛币

3的倍数

题意

就是把给的数全部都连接起来,然后判断这个数是不是3的倍数。

思路:

题目很简单,由小学的知识 就知道,判断一个数是不是3的倍数,只需要判断每一位的和是不是3的倍数就行了。

当然不可能把每个数都分解,可以证明,从L ~ R的所有位数相加%3 ,就等于 L~R求和。

求和公式:

LR=(L+R)(RL+1)/2\sum _{L}^{R}=(L+R)*(R-L+1)/2

所以题目最后变成了判断(L+R)(L+R)(RL+1)(R-L+1) 是不是3的倍数。

code:

#include<iostream>
using namespace std;

int main(){
    int T;
    cin>>T;
    while(T--){
        long long l,r;//观察数据范围,1e18,肯定要做到O(1)
        cin>>l>>r;
        if((r+l)%3==0||(r-l+1)%3==0) puts("YES");
        else puts("NO");
    }
}