有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯被打开, 开着灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?
输入:n和k,输出开着的灯编号。k≤n≤1000。
样例输入:7 3
样例输出:1 5 6 7
#include<iostream>
using namespace std;
#define MAX 1000+10
void Switch(int &a){
if(a == 1)
a = 0;
else
a = 1;
}
int main(){
int light[MAX];
int n;
cin >> n;
int k;
cin >> k;
if(k < 1)
return 0;
//
for(int i = 0; i < n; i++)
light[i] = 1;
//
int num = 2;
while(num <= k){
for(int j = 0; j < n; j++){
if((j+1) % num == 0)
Switch(light[j]);
}
num++;
}
//
for(int l = 0; l < n; l++){
if(light[l] == 1)
cout << l+1 << " ";
}
cout << endl;
return 0;
}