✏️ 纠错
第 148 题 / 共 155 题
题目描述
给定正整数 n,现在有 1,2,…,n 共计 n 个整数。你需要从这 n 个整数中选取一些整数,使得所选取的整数中任意两个不同的整数均互质(也就是说,这两个整数的最大公因数为 1)。请你最大化所选取整数的数量。
例如,当 n=9 时,可以选择 1,5,7,8,9 共计 5 个整数。可以验证不存在数量更多的选取整数的方案。
输入格式
一行,一个正整数 n,表示给定的正整数。
输出格式
一行,一个正整数,表示所选取整数的最大数量。
输入输出样例
输入 #1
6
输出 #1
4
输入 #2
9
输出 #2
5
说明/提示
对于 40% 的测试点,保证 1≤n≤1000。
对于所有测试点,保证 1≤n≤105。
你真棒!
📝 题目解析
【题目大意】从1到n这n个整数中,选出尽可能多的数,要求选出的数两两互质(任意两个数的最大公约数为1),求最多能选多少个。我们需要找到一个最大的子集,其中任意两个不同的整数互质。质数之间自然互质,且1与所有整数互质,因此包含所有质数和1的集合满足条件。
【考纲知识点】数论基础,贪心算法
【解题思路】任何合数都会与某个质数共享质因子,因此如果已经选择了所有质数,则无法再添加任何合数而不破坏互质条件。最大子集的大小为1加上不超过n的质数数量。
【参考程序】