sgu里最水一道题大概也莫过于此……
中文译题:
105. 除以3
时间: 0.50 sec.
空间: 4096 KB
这样一个数列 1, 12, 123, 1234, ..., 12345678910, ... . 你需要找出这个数列1-N号元素中能被3整除的有多少个。
输入
包含 N (1<=N<=231 - 1).
输出
输出答案
样例输入
4
样例输出
2
【解题思路】
这个数列的第n项就是前n个正整数串起来,串起来后整除3的充要条件是各位的和整除3,我们可以把“各位的和”分离开到原来的每一个正整数上,比如1234567891011=1+2+3+4+5+6+7+8+9+1+0+1+1=1+2+3+4+5+6+7+8+9+(1+0)+(1+1)
它整除3的充要条件,又是每个括号里面的和加起来整除3,而每个括号和/3的余数,又等价于原数(比如:(1+0)≡10, mod 3)除3的余数。
综上所述,数列第n项和1,2,3,4...这个数列的前n项和在mod 3是同余的。
所以第n项整除3相当于n(n+1)/2整除3;这个是每3个里出现两个。
最后得到本题的ans公式。
n mod 3=2: ans=(n div 3)*2+1
n mod 3=0,1: ans=(n div 3)*2
【AC代码】