Typesetting math: 100%
为了能到远方|

园龄:粉丝:关注:

数论分块

问题描述

给定一个正整数 n,求当 k1n 时,nk 的不同取值个数。

分析

理解 nk 的含义

  • nk 表示 n 除以 k 的整数部分。
  • 随着 k 的增加,nk 逐渐减小或保持不变。

分块

k 的范围分成若干块,使得在每个块内 nk 保持不变

也就说对于一块Q,左边界是l,右边界是r ,i[l,r],nl=ni=nr

  • 对于每个 m,定义 nk=m 的范围为:

    nm+1<knm.

  • 因此,满足上述不等式的整数 k 的数量为:

    nmnm+1.

计算不同 m 值的数量

  • 不同的 m 值的数量等于所有 m 中,块大小至少为 1m 的数量。
  • 即,需要满足:

    nm>nm+1.

分布计算

  1. 前半部分kn
    每个 k 对应唯一值 n/kn,因此不同值数量为 n

  2. 后半部分k>n:
    n/k 的取值范围为 1vn,但每个 v 对应的 k 区间为 (nv+1,nv]
    因此,有效 v 的个数为 nn+1

答案

不同的 m 值的数量为:

n+nn+1.

For example

n=10nk 不同取值个数


  1. 计算分界点:

    • 10=3,将区间分为 k3k>3 两部分。
  2. 前半部分(k3):

    • k=1: 10/1=10
    • k=2: 10/2=5
    • k=3: 10/3=3
    • 不同值数量:3 个(10, 5, 3)。
  3. 后半部分(k>3):

    • 计算 10/(3+1)=10/4=2,表示可能的值为 21
      • k=4k=5: 10/4=2, 10/5=2
      • k=6k=10: 10/k=1
    • 不同值数量:2 个(2, 1)。

  1. 总个数:
    • 3+2=5 个不同值:{10,5,3,2,1}

列出所有 k=1k=10 的结果:

10/k={10,5,3,2,2,1,1,1,1,1}

去重后得到 {10,5,3,2,1},共 5 个不同值,与公式结果一致。


其他例子

  • n=66=2,后半部分 6/(2+1)=2,总个数 2+2=4
    实际结果:{6,3,2,1}
  • n=99=3,后半部分 9/(3+1)=2,总个数 3+2=5
    实际结果:{9,4,3,2,1}

例题

N%i(i[1,n])前k大余数和
见此题解,G题

本文作者:归游

本文链接:https://www.cnblogs.com/guiyou/p/18696031

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   归游  阅读(13)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起