代码的主体思路是正确的,但是存在一些小错误:

  1. 在计算完质数表后,应该从小到大枚举质数 $p$,然后从 $p$ 的倍数开始标记合数,而不是从 $i=2$ 开始依次枚举 $i$,这样可以保证每个合数只会被标记一次。

  2. 在计算 $a,b$ 的值时,应该在每个质因子的幂次确定后,根据质因子的个数来分类讨论,而不是只根据幂次来判断。当幂次大于 $1$ 时,需要将当前质因子乘上相应的幂次个数;当幂次等于 $1$ 时,需要判断将当前质因子选为 $a$ 还是 $b$ 更优。

下面是修改后的代码:

#include iostream#include cstring#include algorithmusing namespace std;const int N = 1000010;int n;int primesN cnt;bool stN;int main cin n; for int i = 2; i = n; i ++ if !sti primes

原文地址: https://www.cveoy.top/t/topic/hvOp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录