解题思路
残核密钥要求从右向左逐位删去末位后,每一步得到的数都仍是素数。
长度至少为 2 时,末位只能是 1,3,7,9,否则必为偶数或 5 的倍数。逐位扩展时每次只有 4 种候选,素数密度随位数下降很快。事实上十进制下这类数一共只有 83 个,最大为 8 位数 73939133。
因此可以一次性预处理出全部残核密钥:从一位素数 2,3,5,7 出发做 BFS,每次在右侧接上 1,3,7,9,用试除判定是否为素数。得到升序数组后,每次询问 [l,r] 用二分统计落在区间内的个数。
素数判定对不超过 1018 的数做试除即可;实际生成过程中数的位数不超过 8,预处理很快。
开通会员即可查看完整视频题解: 1.题目讲解 2.思路分析 3.逐行代码手写