游客 Signup | Login
中文 | En

2039 - 开灯关灯

n盏等,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),以此类推。一共有k个人,问最后有哪些灯开着?

Input

输入数据有多组,输入n盏灯以及k     (k≤n≤1000)

Output

输出开着的灯的编号,参照样例输出

Examples

Input

7 3
8 2

Output

1
5
6
7
1
3
5
7

Solution C

#include<stdio.h>
#include<string.h>
main()
{
	int num[1001],n,k;
	while(scanf("%d%d", &n, &k)!=EOF)
	{
		memset(num,0,sizeof(int)*1001);//0开1关 
		int i,j;
		for(i=2;i<=k;i++)
		{
		for(j=1;j<=n;j++)
		if(j%i==0)
		{
			if(num[j]==0)
			num[j]=1;
			else
			num[j]=0;
		}
		}
		for(i=1;i<=n;i++)
		{
		if(num[i]==0)
		printf("%d\n",i);
		}
	}
}

Solution C++

#include<stdio.h> 
#include<string.h> 
int lamp[101]; 
int main() 
{ 
    int n , k , i , j; 
    while(scanf("%d%d",&n,&k)!=EOF) 
    { 
        memset(lamp,0,sizeof(lamp)); 
        for(i =2 ; i <= k ; i++) 
        { 
            for(j = 1 ; j * i <= n ;j++) 
            { 
                if(lamp[i*j] == 0) 
                lamp[i*j] = 1; 
                else    
                lamp[i * j] = 0; 
            } 
        } 
        for(i = 1 ; i <= n ; i++) 
        { 
            if(lamp[i] == 0){ 
            printf("%d",i); 
            printf("\n"); 
            } 
        } 
    } 
} 
Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题