5.## 硬币翻转假设有N个硬币(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于正面向上的状态;有M个人(M为不大于N的正整数)也从1到M依次编号。第一个人(1号)将硬币全部翻转一次,第二个人(2号)将编号为2的倍数的硬币翻转一次,第三个人(3号)将编号为3的倍数的硬币翻转一次。依照编号递增顺序,以后的人都和3号一样,将凡是自己编号倍数的硬币翻转一次。请问:当第M个人操作之后,哪些硬币是正面向上的,按从小到大输出其编号,以空格分开。时间限制:10000内存限制:65536输入输入正整数N和M,以单个空格隔开。输出顺次输出正面向上的硬币的编号,其间用空格间隔。样例输入10 10样例输出2 3 5 6 7 8 10
【喵呜刷题小喵解析】:这个问题可以通过模拟来解决,具体的方法已经在答案中给出。在这个问题中,我们需要判断每一个硬币是否被翻转过,因此我们可以使用一个布尔数组来记录每一个硬币的状态。然后,我们可以根据题目描述的规则,对于每一个操作人,判断其操作范围内的每一个硬币是否被翻转过。最后,我们可以输出所有没有被翻转过的硬币的编号。需要注意的是,由于硬币的编号是从1开始的,因此在初始化布尔数组时,我们需要将数组的长度设为N+1,以便能够记录编号为N的硬币的状态。另外,在判断硬币是否被翻转过时,我们需要从操作人的编号开始遍历,而不是从1开始。这是因为,如果操作人的编号小于硬币的编号,那么硬币就不会被翻转。因此,我们只需要判断硬币的编号是否为操作人的编号的倍数即可。