小Q得到一个神奇的数列: 1, 12, 123,...12345678910,1234567891011...。
并且小Q对于能否被3整除这个性质很感兴趣。
小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。
输入描述:
输入包括两个整数l和r(1 <= l <= r <= 1e9), 表示要求解的区间两端。
输出描述:
输出一个整数, 表示区间内能被3整除的数字个数。
1 inputval = list(map(int,input().split())) 2 low,high = inputval[0],inputval[1] 3 cnt = 0 4 if (high - low) // 3 <= 1: 5 for i in range(low,high+1): 6 y = i % 3 7 if y == 1: 8 cnt += 0 9 elif y == 0: 10 cnt += 1 11 else: 12 cnt += 1 13 else: 14 z = (high - low) // 3 15 z1 = (high - low + 1) // 3 16 z2 = (high - low + 1) % 3 17 if z2 == 0: 18 cnt = z1 * 2 19 else: 20 l = low % 3 21 if l == 1 or l == 2: 22 cnt += 2 23 elif l == 0: 24 cnt += 1 25 h = high % 3 26 if h == 1: 27 cnt += 0 28 elif h == 2: 29 cnt += 1 30 else: 31 cnt += 2 32 cnt += (z-1) * 2 33 print(cnt)
题目类型:数学
算法思想:位数 % 3有三种取值,
值为1:不能整除,值为2:可以被整除,值为0:可以被整除。
因此在low到high之间,以3个为一组,每组中有2个可以被3整除。再处理一下边缘值即可。