T394038 「CHNCO 2023」 简单质数问题Pproblem

思路

  1. 首先我们先来一遍 \(10^6\) 的线性筛,因为这题埃氏筛可能被卡;
  2. 然后我们对于每一个 \(1\le i\le n\) 都枚举一遍,计算 \(p(i)\) 的和;
  3. 再来一个 \(\sqrt x\) 的暴力枚举 \(i\),通过 \(i\) 计算出 \(j\),然后判定条件即可。

伪代码

常量 整形 最大长度 = 十的六次 + 5。

整形 质数[最大长度],计数器,甲,答案。
布尔 标记[最大长度]。

函数 无 欧拉筛(甲:整形)
  乙 = 2 当 乙 小于等于 甲 后
    质数[++计数器] = 乙 若 !标记[乙]
    丙 = 1 若 丙 小于等于 计数器
      退出 若 乙 * 质数[丙] > 甲
      标记[甲 * 质数[丙]] = 1
      退出 若 甲 % 质数[j] 等于 零
    丙++ 云云
  乙++ 云云
云云

函数 布尔 判断(甲:整形)
  乙 = 1 若 乙 的平方 小于等于 甲
    若 甲 % 乙 等于 零 并且 乙 的平方 不等于 甲 并且 标记[乙] 并且 标记[乙 分之 甲]
      返回 真
    云云
  乙++ 云云
  返回 假 
云云

欧拉筛(十的六次)
输入(甲)
答案 = 求和(i = [1,甲],C(i))
输出(答案)
posted @ 2023-10-30 20:51  haokee  阅读(17)  评论(0)    收藏  举报