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;
}
上一题
下一题