ps.听说这题数据出锅了,于是先去修了个锅(数据里的样例组数和下面的数量对不上,会导致快读超时)
前置知识
引理:一个正整数是3的倍数的充要条件是:该正整数的各数位之和是3的倍数。
证明:
设正整数为
这个性质应该很多人都熟悉了,所以不多赘述。
关于本题
我们现在要把L到R所有数连在一起,等价于将它们的数字求和,等价于检测把L到R所有数求和后检测其是否被3整除。
因此只需要用等差数列求和公式: ,判断 和 中是否存在3的因子即可。
参考代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
long long l,r;
cin>>l>>r;
if((r+l)%3==0||(r-l+1)%3==0)cout<<"YES\n";
else cout<<"NO\n";
}
}
t=int(input())
for i in range(t):
l,r=map(int,input().split())
if (l+r)*(r-l+1)%3==0:
print('YES')
else:
print('NO')
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int t=in.nextInt();
for(int i=0;i<t;i++){
long l=in.nextLong(),r=in.nextLong();
if((r+l)%3==0||(r-l+1)%3==0)System.out.println("YES");
else System.out.println("NO");
}
}
}
t=gets.to_i
for i in 1..t
l,r=gets.split().map(&:to_i)
if (r+l)*(r-l+1)%3==0
puts 'YES'
else
puts 'NO'
end
end