Division by 3

来源:互联网 发布:健德门附近做软件 编辑:程序博客网 时间:2024/05/21 20:25

Description

There is sequence 1, 12, 123, 1234, ..., 12345678910, ... . Now you are given two integers A and B, you have to find the number of integers from Ath number to Bth (inclusive) number, which are divisible by 3.

For example, let A = 3. B = 5. So, the numbers in the sequence are, 123, 1234, 12345. And 123, 12345 are divisible by 3. So, the result is 2.

Input

Input starts with an integer T (≤ 10000), denoting the number of test cases.

Each case contains two integers A and B (1 ≤ A ≤ B < 231) in a line.

Output

For each case, print the case number and the total numbers in the sequence between Ath and Bth which are divisible by 3.

Sample Input

2

3 5

10 110

Sample Output

Case 1: 2

Case 2: 67

题意:在给的范围内被3除的个数;;

思路:

连续三个整数并排在一起组成的数的数字和必然能被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)个

#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;int main(){int t,h=1;scanf("%d",&t);while(t--){long long a,b,m=0,n=0;scanf("%lld%lld",&a,&b);n=(a-1)/3*2;if((a-1)%3==2)n++;m=b/3*2;if(b%3==2)m++;printf("Case %d: %lld\n",h++,m-n);}return 0;}


0 0
原创粉丝点击