可用线性筛找所有素数,同时计算前缀和 pre[i]pre[i]pre[i] (表示前 iii 个数字里的素数数) 。
* 若 nnn 是素数,直接输出 000 即可。
* 若 nnn 非素数,显然要计算小于 nnn 且能与 nnn 合到同一集合的元素数。显然得排除在区间 [n/2,n][n / 2, n][n/2,n] 内的素数数
即用 n−2n - 2n−2 (排除 111 和 nnn 本身),再减去在区间 [n/2,n][n / 2, n][n/2,n] 的素数数 pre[n−1]−pre[n/2]pre[n - 1] - pre[n / 2]pre[n−1]−pre[n/2] 即可。
时间复杂度 O(maxn+t)O(maxn + t)O(maxn+t)。
目前提交记录用时最优解