1 条题解
-
-2
思路
情况分为 3 种:
第 1 种情况,当 n=1 或 m=1 的时候,显然只能选到一个算法所以肯定会结束。
第 2 种情况,当 n≤m 的时候,我们可以让 n 个人每一轮都各自选择 n 种不同的算法,这样的话就能每轮都保留n种算法,投票就不会结束。
第 3 种情况,当 n < m 的时候,我们如果能够找到一个 n 的因数 x,并满足 2≤x≤m 即可。就可以在第一轮时选择 x 个算法,然后一直平均分配票数,投票就永远不会结束。 所以只需要判断一下 n 能不能分解出来一个比 m 小的因数即可。
由于题目询问次数很多,所以我们可以使用线性筛,预处理出2~1000000范围中,每个数的最小因数,并记录,主函数中根据三种情况进行判断并输出即可。
参考代码
//预处理出数据范围内,每个数最小的因数保存在f数组里 memset(f, 0x3f, sizeof(f)); for (int i = 2; i <= 1000000; ++i) if (f[i] == 0x3f3f3f3f) { for (int j = i; j <= 1000000; j += i) f[j] = min(i, f[j]); }
- 1
信息
- ID
- 645
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 188
- 已通过
- 34
- 上传者