[蓝桥杯] 第五届蓝桥杯总决赛 - 灯泡问题

题目大意是说,给你n个灯泡,初始时都是灯灭的状态。

第一次挑选序号为2、4、6。。。的灯泡并拨动一次开关,也就是亮变灭,灭变亮。

然后挑选序号为3、6、9.。。。的灯泡拨动一次开关。

然后是4、8、12.。。。

一直到 n。

每次输入三个数 N L R,表示N个灯泡,问从序号L到序号R中有几个灯泡是亮的(1 <= L,R <= 10^15)。

例如:5 2 3输出3,因为拨动开关后的状态是:

 1   2  3   4   5

灭 亮 亮 灭 亮

我们写出20个灯泡的最终状态:可以发现1、4、9、16的灯泡不亮,其他都亮,很容易看出来平方数是不亮的,其他数都是亮的。

问题在于数据量是10^15,不能蛮力计算平方数的个数。有个相当简单的办法,开个根号就行了

[L, R]的平方数数量=根号(R) - 根号(L-1)

那么答案就是R - L + 1 - 根号(R) + 根号(L-1)

你可能感兴趣的:(ACM,数论)