有n盏灯,编号为1-n,第一个人把所有灯打开,第二个人按下所有编号两倍的开关(这些灯被关掉),第三个人按下所有编号三倍的开关,以此类推,一共有k个人,问最后有哪些灯开着?
输入:n和k,输出开着的灯的编号,k<=n<=1000
样例输入:
7 3
样例输出:1 5 6 7
以下是我自己写的代码//小白一个
有问题希望大家帮忙指出
#include<stdio.h> //开灯问题
#include<string.h>
#define max 1000
int a[max];
int main()
{
int n, k;
scanf("%d %d", &n, &k);
memset(a, 0, sizeof(a));
for(int i = 1; i <= k; i++)
{
for(int j = 1; j <= n; j++)
{
if(!(j % i)) a[j - 1] = !a[j - 1];
}
}
for(int i = 0; i < n; i++)
{
if(a[i] == 1)
printf("%d ", i + 1);
}
}