【問題描述】
假設有 N 盞燈(N 為不大於 5000 的正整數),從 1 到 N 按順序依次編號,初始時全部處於開啟狀態;有 M 個人(M 為不大於 N 的正整數)也從 1 到 M 依次編號。第一個人(1 號)將燈全部關閉,第二個人(2 號)將編號為 2 的倍數的燈打開,第三個人(3 號)將編號為 3 的倍數的燈做相反處理(即,將打開的燈關閉,將關閉的燈打開)。依照編號遞增順序,以后的人都和 3 號一樣,將凡是自己編號倍數的燈做相反處理。請問:當第 M 個人操作之后,哪幾盞燈是關閉的,按從小到大輸出其編號,其間用逗號間隔。
【代碼展示】
#include<iostream>
using namespace std;
int main(){
int n,m;
cin >> n >> m;
int q[n+1]={0};
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(j%i==0&&q[j]==0){
q[j]=1;
}
else if(j%i==0&&q[j]==1){
q[j]=0;
}
}
}
for(int i=1;i<=n;i++){
if(q[i]==1){
cout << i << " ";
}
}
return 0;
}