2011: 硬币翻转

内存限制:256 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:19 解决:10

题目描述

假设有N个硬币(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于正面向上的状态;有M个人(M为不大于N的正整数)也从1到M依次编号。

第一个人(1号)将硬币全部翻转一次,第二个人(2号)将编号为2的倍数的硬币翻转一次,第三个人(3号)将编号为3的倍数的硬币翻转一次。依照编号递增顺序,以后的人都和3号一样,将凡是自己编号倍数的硬币翻转一次。

请问:当第M个人操作之后,哪些硬币是正面向上的,按从小到大输出其编号,以空格分开。

输入

输入正整数N和M,以单个空格隔开。


输出

顺次输出正面向上的硬币的编号,其间用空格间隔。

样例输入 复制

10 10

样例输出 复制

2 3 5 6 7 8 10

提示

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n,m;
    cin>>n>>m; 
    /*
	i:硬币的编号 
    j:人的编号
    op:-1正面向上,1为正面向下 
	*/ 
    for (int i=1;i<=n;i++) {
    	int op=-1;
    	for (int j=1;j<=m;j++) {
    		if (i%j==0) {
    			op*=-1;
			}
		}
		if (op==-1) 
		    cout<<i<<" ";
	}
	return 0;
}