http://www.lightoj.com/volume_showproblem.php?problem=1136
开始打算解二次同余的,算了一会发现有很多解。。-->转而分析序列结构。
分析发现:
连续三个整数并排在一起组成的数的数字和必然能被3整除。(x+x+1+x+2=3x+3=3(x+1))
从而有:
1.题目中的第3k个数,必然能被三整除。
2. 题目中的第3k + 1个数,其第2个数字到最末一个数字之和必然能被3整除,再加上第一个数字,也就是1,就不能被3整除了。
3. 题目中的第3k + 2个数,其第3个数字到最末一个数字之和必然能被3整除,再加上第一、二个数字,也就是1 + 2 = 3,也能被3整除。
所以1~k中能被3整除的有2k/3+(k%3==2?1:0)个
/*0.008s,1088KB*/
#include<cstdio>
typedef unsigned int ll;
ll calc(ll k)
{
return k / 3 * 2 + (k % 3 == 2 ? 1 : 0);
}
int main()
{
int t, cas = 0;
ll a, b;
scanf("%d", &t);
while (t--)
{
scanf("%u%u", &a, &b);
printf("Case %d: %u\n", ++cas, calc(b) - calc(a - 1));
}
return 0;
}