测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A42643. 开关灯

填空题 容易

题目描述

开关灯

题目描述

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

第一个人(1 号) 将灯全部关闭, 第二个人(2 号) 将编号为 2 的倍数的灯打开, 第三个人(3 号) 将编号为 3 的倍数的灯做相反处理( 即, 将打开的灯关闭, 将关闭的灯打开) 。

依照编号递增顺序, 以后的人都和 3 号一样, 将凡是自 己编号倍数的灯做相反处理。

请问: 当第 M 个人操作之后, 哪几盏灯是关闭的, 按从小到大输出其编号, 其间用逗号间隔。

输入

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

输出

顺次输出关闭的灯的编号, 其间用逗号间隔。

样例输入

10 10

样例输出

1, 4, 9

参考答案

#include <bits/stdc++.h> using namespace std; int main() { int n,m,b,x; cin>>n>>m; b = 0; x = 0; for (int i = 1; i <= n; i++) { for (int a = 1; a <= m; a++) { if (i%a == 0) b++; } if (b%2 == 1) { x++; if (x != 1) { printf(",%d",i); b = 0; } else { printf("%d",i); b = 0; } } } return 0; }
上一题 下一题