经典问题:求
i=1∑n⌊im⌋
关键在于这个向下取整。以下是 n=m=20 时的情况:
i⌊im⌋12021036455463728292102111121131141151161171181191201
观察一下可以发现,有重复的 1,2 出现。若我们可以将 ⌊im⌋ 值相同的 i 在一次统计完,就可以缩短时间。
容易得到的是第一段的开头,即 i=1。那么如何计算结尾呢?因为在一段中,⌊im⌋ 相同,所以我们可以算出 ⌊1m⌋=m。问题被转换成为,找到最大的正整数 i 使 ⌊im⌋=m。那么要有 im≤m(反证法)。
所以 i=⌊mm⌋=1。
形式化地,当一段的 l 确定,那么该段的值为 t=⌊lm⌋。那么 rt≤m,所以得:
r=⌊tm⌋=⌊lm⌋m