开关灯模拟代码
题目如下: 假设有 NN 盏灯(NN 为不大于 50005000 的正整数),从 11 到 NN 按顺序依次编号,初始时全部处于开启状态;有 MM 个人(MM 为不大于 NN 的正整数)也从 11 到 MM 依次编号。 第一个人( 11 号)将灯全部关闭,第二个人( 22 号)将编号为 22 的倍数的灯打开,第三个人( 33 号)将编号为 33 的倍数的灯做相反处理(即,将打开的灯关闭,将关闭的灯打开)。依照编号递增顺序,以后的人都和 33 号一样,将凡是自己编号倍数的灯做相反处理。 请问:当第 MM 个人操作之后,哪几盏灯是关闭的,按从小到大输出其编号,其间用逗号间隔。 输入格式 输入正整数 NN 和 MM,以单个空格隔开,M\le NM≤N。 输出格式 顺次输出关闭的灯的编号,其间用逗号间隔。 样例输入 10 10 样例输出 1 , 4 , 9 这道题没有过多的算法,直接模拟即可。 下面是我的代码供参考 如果有更快的代码请教一下我qwq # include <iostream> using namespace std ; bool vis [ 5005 ] ; int main ( ) { int n , m ; cin >> n >> m ; bool b = false ; for ( int i = 1 ; i <= n ; i ++ ) { vis [ i ] =