开灯问题。有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?
要求输入n和k,输出开着的灯的编号,其中k≤n≤500。(要求用数组实现,输入输出都以空格分隔)
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,k,x,i;
int a[500],b[500];
scanf("%d %d",&n,&k);
for(x=1;x<n+1;x++)
a[x]=x;
for(x=1;x<k+1;x++)
{
for(i=1;i<a[x]+1;i++)
{if(a[x]%i==0)
b[x]++;}
}
for(x=1;x<n+1;x++)
{
if(b[x]%2==1)
printf("%d ",a[x]);
}
printf("\n");
system("pause");
return 0;
}