AcWing 874 筛法求欧拉函数
发布日期:2021-05-28 16:27:02 浏览次数:31 分类:精选文章

本文共 589 字,大约阅读时间需要 1 分钟。

欧拉函数phi(n)是数论中的重要概念,用于计算在1到n范围内与n互质的数的个数。为了高效地计算1到n范围内所有数的欧拉函数之和,本文采用了线性筛法的方法,实现了对欧拉函数的快速计算。

首先,初始化了一个标记数组st,用于记录已经处理过的数。构造一个质数数组primes和欧拉函数值数组euler。对于质数p,处理其每一个倍数t=p*q(q为质数),并相应地调整欧拉函数值。具体来说:

  • 遍历每个质数p,假设没有被处理过。
  • 将p加入质数列表,并计算其欧拉函数值phi(p)=p-1。
  • 对于p的每一个倍数t,假设t上存在p的每一个质因数。
    • 如果t能被p整除,那么调整t的欧拉函数值。
    • 否则,将t的欧拉函数值乘以(p-1)。
  • 通过这种方法,每个数的欧拉函数值可以高效计算,避免了单独计算每个数的复杂度。这一点在处理大n时显得尤为重要,特别是当n达到1e6时,直接逐个计算会导致效率严重下降。

    最终,通过遍历1到n的每个数并求和euler数组,得到了1到n范围内所有数的欧拉函数之和。

    这种方法的亮点在于线性筛法的效率,能够在O(n log log n)的时间复杂度内完成计算。对于数据范围到1e6的情况,这种方法是合理且高效的,确保了程序能够快速完成计算任务。

    通过对欧拉函数的深入理解和对筛法算法的优化,本文成功地实现了对大范围数据的高效处理,解决了问题并展示了算法的实际应用价值。

    上一篇:AcWing 875 快速幂
    下一篇:AcWing 873 欧拉函数

    发表评论

    最新留言

    第一次来,支持一个
    [***.219.124.196]2025年04月25日 11时21分06秒