自写的代码,修改一下

有n个灯排成一排,编号为1到n。有m个人从1到m编号。1号将灯全部关闭;2号将凡是2的倍数的灯打开;3号将凡是3的倍数的灯做相反处理(将打开的关闭,将关闭的打开);以后的人都和3号一样,将凡是自己编号倍数的灯做相反处理。请计算第m个人操作之后,哪些等是点亮的。从键盘输入两个整数n和m(m<=n<=1000),输出点亮的灯的编号。

输入格式
两个整数n和m

输出格式
一行空格间隔的整数,表示点亮的灯

样例输入 1
5 5

样例输出 1
2 3 5

样例输入 2
5 0

样例输出 2
1 2 3 4 5
我的代码(样例没过):#include<bits/stdc++.h>
using namespace std;
bool a[1005];
int n,m;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
if(m==0){
cout<<i<<" ";
}
}
while(m>=0){
for(int i=1;i<=n;i++){
a[i]=0;
m--;
}
for(int i=1;i<=n;i++){
if(i%2==0){
a[i]=1;
m--;
}
}
for(int i=1;i<=n;i++){
for(int k=3;k<=n;k++){
if(i%k==0&&a[i]==1){
a[i]==0;
}
if(i%k==0&&a[i]==0){
a[i]==1;
}
}
m--;
}
}
for(int i=1;i<=n;i++){
if(a[i]==1){
cout<<i<<endl;
}
}
return 0;
}

for(int i=1;i<=n;i++){
a[i]=0;
m--;
}
for(int i=1;i<=n;i++){
if(i%2==0){
a[i]=1;
m--;
}
}
这里感觉就不对劲,m--不应该放在for循环里面