题目描述
小Q得到一个神奇的数列: 1, 12, 123,...12345678910,1234567891011...。
并且小Q对于能否被3整除这个性质很感兴趣。
小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。
输入描述:
输入包括两个整数l和r(1 <= l <= r <= 1e9), 表示要求解的区间两端。
输出描述:
输出一个整数, 表示区间内能被3整除的数字个数。
示例1
输入
2 5
输出
3
说明
12, 123, 1234, 12345... 其中12, 123, 12345能被3整除。
这道题目先要用数论性质优化到,O(N), 等效于判断i*(i+1)/2 是否能被3整除,如果直接在这里处理的话,会超时。需要再进一步等效于判断i是否能被3整除,以及i+1是否能够被3整除。
#include <iostream>
using namespace std;
typedef long long LL;
int main()
{
int l,r,res=0;
cin>>l>>r;
LL temp;
for(int i=l;i<=r;i++){
//temp = (LL)(1+i)*i/2;
//if(temp%3==0) res++;
if(i%3==0||(i+1)%3==0) res++;
}
cout<<res<<endl;
//system("pause");
}