✏️ 纠错
第 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的质数数量。

【参考程序】