LightOJ 1136 Division by 3 (想法题)2014-07-08 csdn博客 synapse7http://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)个完整代码:
01./*0.008s,1088KB*/02.03.#include<cstdio>04.typedef unsigned int ll;05.06.ll calc(ll k)07.{08.return k / 3 * 2 + (k % 3 == 2 ? 1 : 0);09.}10.11.int main()12.{13.int t, cas = 0;14.ll a, b;15.scanf("%d", &t);16.while (t--)17.{18.scanf("%u%u", &a, &b);19.printf("Case %d: %u
", ++cas, calc(b) - calc(a - 1));20.}21.return 0;22.}