解题思路
设第 j 盏灯被按的总次数为 t(j)。第 i 个人会在 i∣j 或 j∣i 时按一次。
对固定的 j:
- 由“有人是 j 的约数”带来的次数:满足 i∣j 且 1≤i≤m 的个数,记为 d≤m(j)。
- 由“有人是 j 的倍数”带来的次数:满足 j∣i 且 1≤i≤m 的个数,为 ⌊jm⌋。
- 两者交集只在 i=j 时出现(当且仅当 j≤m),被双计了一次,需要减去 1 次。
题目内容
给有n盏灯(编号1~n),初始均为关闭状态。现有m个人(编号1~m),第i个人会对所有满足i ∣ j或j ∣ i的灯j各按一次开关。按一次开关指切换灯的当前状态(开变关,关变开)。
请在所有人按完后,输出最终亮着的灯的数量。
[名词解释]
整除符号: i ∣ j表示i整除j(即j mod i=0),i∤j表示不整除;“i ∣ j或jj ∣ i"指二者存在因倍关系之一。
输入描述
每个测试文件均包含多组测试数据。第一行输入一个整数T(1≦T≦105)表示数据组数。每组测试数据描述如下:
一行输入两个整数
n,m(1≦n≦10,1≦m≤1018)
保证所有测试中n的总和不超过2×106
输出描述
输出T行,每行输出一个整数,表示所有人按完后仍然亮着的灯的数量
样例1
输入
3
5 3
4 1
6 2
输出
2
4
2
说明
样例一: n=5,m=3。计算可得仅j=1,5 为开,答案2。
样例二: m=1时仅第1个人操作,因1 ∣ j对所有j成立,所有灯都被按一次,全部点亮,答案4。
样例三: n=6,m=2,最终仅j=3,5 为开,答案2。