BISHI41 【模板】整除分块

求解思路

当 n=5n=5n=5 时:

  • i=1→⌊5/1⌋=5i=1 \rightarrow \lfloor 5/1 \rfloor = 5i=1→⌊5/1⌋=5
  • i=2→⌊5/2⌋=2i=2 \rightarrow \lfloor 5/2 \rfloor = 2i=2→⌊5/2⌋=2
  • i=3→⌊5/3⌋=1i=3 \rightarrow \lfloor 5/3 \rfloor = 1i=3→⌊5/3⌋=1
  • i=4→⌊5/4⌋=1i=4 \rightarrow \lfloor 5/4 \rfloor = 1i=4→⌊5/4⌋=1
  • i=5→⌊5/5⌋=1i=5 \rightarrow \lfloor 5/5 \rfloor = 1i=5→⌊5/5⌋=1

可以看到:i=3,4,5i=3,4,5i=3,4,5 对应的 ⌊5/i⌋\lfloor 5/i \rfloor⌊5/i⌋ 都是 1,这一段可以批量计算

对于当前的 iii,设 v=⌊ni⌋v = \lfloor \frac{n}{i} \rfloorv=⌊in⌋,则最大的 jjj 满足 ⌊nj⌋=v\lfloor \frac{n}{j} \rfloor = v⌊jn⌋=v 是:
j=⌊nv⌋j = \left\lfloor \frac{n}{v} \right\rfloorj=⌊vn⌋。

因此,我们可以按"值相同的区间"分块,每个区间的贡献是 v×(j−i+1)v \times (j - i + 1)v×(j−i+1),然后直接跳到 j+1j+1j+1 继续计算。

求解代码

java 复制代码
public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer in = new StringTokenizer(br.readLine());

        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));

        long n = Long.parseLong(in.nextToken());

        long res = 0;

        long i = 1;

        while (i <= n) {
            long v = n / i; // 当前块的取值
            long j = n / v; // 当前块的右边界
            res += v * (j - i + 1); // 计算当前块的贡献
            i = j + 1; // 跳到下一个块的起点
        }

        out.println(res);
        out.flush();
        out.close();
        br.close();
    }
相关推荐
xieliyu.3 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
明夜之约4 小时前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee4 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Jinkxs4 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
辣机小司4 小时前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录
CryptoPP4 小时前
快速对接东京证券交易所API数据:实战指南与代码示例
开发语言·人工智能·windows·python·信息可视化·区块链
ZC跨境爬虫4 小时前
跟着 MDN 学JavaScript day_7:数学运算与逻辑判断实战测试
开发语言·前端·javascript·学习·ecmascript
fangdengfu1235 小时前
ES分析系统各个服务日志占用量
java·前端·elasticsearch
云烟成雨TD5 小时前
Spring AI 1.x 系列【51】可观测性技术选型
java·人工智能·spring
星越华夏5 小时前
ESP32-CAM图像传输项目说明文档
java·后端·struts·esp32