题目描述
有n盏灯,编号为1~n。
有k个人,编号为1~k。
初始状态n盏灯都是关闭的:
第一个人把所有灯打开
第二个人将2的倍数的灯的反方向拨一次开关
第三个人将3的倍数的灯的反方向拨一次开关
……
第k个人将k的倍数的灯的反方向拨一次开关
问最后有哪些灯开着?
输入
输入为两行,每行一个数,分别为n和k
输出
从小到大输出开着的灯的编号,每个编号后输出一个空格
样例输入
100 100
样例输出
1 4 9 16 25 36 49 64 81 100
参考代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
bool a[10000];
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
a[i]=false;
for(int i=1;i<=k;i++)
for(int j=i;j<=n;j+=i)
a[j]=!a[j];
for(int i=1;i<=n;i++)
if(a[i])
printf("%d ",i);
return 0;
}