B2092 开关灯
思路
定义 bool 数组 $a,a[i]$ 表示第 $i$ 个灯是否关闭。
从 $1$ 到 $n$ 枚举每个人,对于每个人,枚举倍数。
令人数$×$倍数 $≤ n$,再修改 $a[$ 人数 $×$ 倍数 $]$ 的状态。
代码
#include <iostream>
using namespace std;
bool a[5001];int n;
int main()
{
cin >> n;
for(int i = 1;i <= n;++i) //枚举每个人
for(int j = 1;i * j <= n;++j) //枚举倍数,人数×倍数≤n
a[i * j] = !a[i * j]; //修改状态
for(int i = 1;i <= n;++i)
if(a[i]) cout << i << " "; //灯是关的,输出
return 0;
}