题目大意
查看原帖
题目大意
1358900
zhizhenkanliyan楼主2024/8/14 07:54

你一排有n盏灯。起初,他们都关闭了。 你将逐一按下这些n灯。当你按下灯i时,灯i将切换其状态,这意味着如果它关闭,它将打开,如果它打开,它将关闭,然后对于每个j满足 i|ji∣j , i<j≤ni<j≤n ,按下灯j一次。

例如,如果n=4,当您按下灯1时,灯1将亮起,然后您将按下灯2,3,4。由于您按下了灯2,灯2将打开,您将按下灯4,这将导致灯4打开。所有操作后,灯1、2、3将打开,灯4仍将关闭。

您将按下这些n灯,并逐一执行上述操作。在所有操作之后,您想知道灯k是打开还是关闭。

您还可以使用以下代码来理解问题的含义:

void press(int x)
{
    light[x]^=1;
    for (int y=x+x;y<=n;y+=x) press(y);
}
for (int i=1;i<=n;i++) press(i);

输入 第一行包含一个整数T表示测试用例的数量。 T(1≤T≤10 ^5 )T(1≤T≤10 5 )

每个测试用例包含两个整数n,k在一条线上。 (1≤k≤n≤10 ^6)(1≤k≤n≤10 6 )

输出 对于每个测试用例,如果最后打开灯k,则输出YES,否则输出NO.

2024/8/14 07:54
加载中...