题解中似乎都没有详细解释为什么枚举范围是 Pri[i] * Pri[i] <= cur(Pri 是素数数组),事实上最严谨的枚举范围个人认为是 Pri[i] * (Pri[i] + 1) < cur。希望有大佬能解释一下前者正确的原因 /kel。
我的理由:考虑 if (cur - 1 >= Pri[p] && IsPrime(cur - 1)) 为了不跟前面枚举的重复,余下的 cur - 1 始要比前面枚举过的 Pri[k] 大(即 cur - 1 >= Pri[p],p 是该层枚举的起点) ,那么就要保证之前枚举的 Pri[i] + 1 小于 cur / Pri[i] 也即 Pri[i] * (Pri[i] + 1) < cur。
AC 代码可查看记录 R42069540。