Description
现在有n盏灯,编号1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的灯的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的灯的开关(其中关掉的灯将被打开,开着的灯将被关闭),依次类推。一共有k个人,问最后哪些灯是开着的?
Input
单组样例,n和k(含义如上文所述),1≤k≤n≤1000。
- Output
由小到大输出开着的灯的编号,相邻的数以空格分隔。
- Sample Input
7 3
- Sample Output
1 5 6 7
- Hint
注意输出时只有相邻的两个数之间才有一个空格,第一个数之前与最后一个数之后均无空格~
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
using namespace std;
int v[1003];
int main()
{
int k,n,i,first;
cin>>n>>k;
for(i=1;i<=n;i++)
v[i]=1;
for( i=2;i<=k;i++)
{
for(int j=1;i*j<=n;j++)
v[i*j]=-v[i*j];
}
first=0;
for(i=1;i<=n;i++)
{
if(v[i]==1)
{
if(first==0)
cout<<i,first=1;
else
cout<<" "<<i;
}
}
cout<<endl;
return 0;
}