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

A23752. 数字选取

填空题 困难

题目描述

数字选取

题目描述

给定正整数 ,现在有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  。

参考答案

#include <algorithm> #include <cstdio> using namespace std; const int N = 1e5 + 5; int n, p[N], cnt; bool np[N]; int main() { scanf("%d", &n); for (int i = 2; i <= n; i++) { if (!np[i]) p[++cnt] = i; for (int j = 1; j <= cnt && i * p[j] <= n; j++) { np[i * p[j]] = 1; if (i % p[j] == 0) break; } } printf("%d\n", 1 + cnt); return 0; }
上一题 下一题