博客
关于我
牛客多校第七场H(数论分块)
阅读量:256 次
发布时间:2019-03-01

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

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
ll n, k;
ll run(ll x) {
ll j;
ll res = 0;
for (ll i = 2; i <= min(x, k); i = j + 1) {
ll y = x / i;
j = min(x / y, k);
res = (res + ((j - i + 1) * y) % mod);
}
return res;
}
int main() {
scanf("%lld%lld", &n, &k);
ll sum = 0;
sum += n + k - 1;
sum = (sum + run(n) + run(n - 1)) % mod;
printf("%lld\n", sum);
return 0;
}
/这段代码实现了一个经典的数论分块问题。通过观察,我们可以发现当n和k满足一定条件时,问题可以通过分块的方法高效解决。代码中使用了C++编写,实现了分块计算的逻辑。以下是代码的主要功能解析:/

  • 代码结构分析

    • run函数:这是一个核心的分块计算函数,用于处理分块问题。它通过迭代的方式遍历可能的分块区间,计算每个区间的贡献值。
    • main函数:作为程序的入口,读取输入参数n和k,调用run函数计算结果,并输出最终结果。
  • 算法思路

    • 该程序解决的问题与数论分块密切相关。具体来说,问题可以转化为求满足一定条件的数对(n, k)的组合数。
    • 通过观察,当n和k满足一定关系时,可以将问题分解为多个小的子问题,分别计算每个子问题的解,然后将结果累加。
    • 代码中使用了分块技术来优化计算效率,避免了暴力枚举所有可能的情况,从而在较大数据量下仍能保持较快的运行速度。
  • 代码实现细节

    • run函数中,通过循环遍历可能的分块区间[i, j],计算每个区间对结果的贡献。
    • 在循环中,y变量用于计算当前分块的大小,而j变量则用于控制分块的右界。
    • 结果res通过累加每个分块的贡献值,最后返回最终结果。
  • 程序运行流程

    • 读取输入参数n和k。
    • 初始化总和sum,并加上基础值n + k - 1。
    • 调用run(n)run(n - 1)计算分块问题的结果,并累加到总和中。
    • 最后输出总和sum,作为程序的输出结果。
  • 如果需要进一步优化或扩展这个代码,可以考虑以下几个方向:

    • 优化分块计算的逻辑,减少循环次数。
    • 增加代码的注释,提高可读性。
    • 优化变量命名,使其更具描述性。

    转载地址:http://isox.baihongyu.com/

    你可能感兴趣的文章
    Python 优化提速的 8 个小技巧
    查看>>
    Python 余弦相似度与皮尔逊相关系数 计算
    查看>>
    python 使用execjs 报编码错误解决办法,UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xac in position 145: il
    查看>>
    python 使用filetype校验文件
    查看>>
    Python 使用flush函数将缓冲区数据立即写磁盘
    查看>>
    python 使用in判断不准确,in不好使
    查看>>
    Python 使用pandas 进行查询和统计详解
    查看>>
    Redis 配置文件redis.conf详细解释
    查看>>
    python网络爬虫(2)——scrapy框架的基础使用
    查看>>
    python网络爬虫实例教程试读_Python网络爬虫实战教程(全套完整版) - 学途无忧网 - 做技术的王者 - Powered By EduSoho...
    查看>>
    Python 使用哈希函数用于加密
    查看>>
    Python 依赖管理的革新——Poetry 深度解析
    查看>>
    python 保留精度及增加去除数字的千位分隔符(金额化数字)
    查看>>
    python 倒计时 9,8,7,。。。。。。0
    查看>>
    Python 入门开发学习笔记之数据的增删改查
    查看>>
    Python 入门教程(2)搭建环境 2.4、VSCode配置Node.js运行环境
    查看>>
    Python 八大排序算法合集
    查看>>
    python 关于epoll的学习
    查看>>
    Python 内存管理
    查看>>
    Python 内嵌函数:它们有什么用处?
    查看>>