博客
关于我
牛客多校第七场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/

    你可能感兴趣的文章
    python3的 pymysql把mysqldb库取代了,让python 3支持mysqldb的解决方法
    查看>>
    Python3笔记——IDE的选择
    查看>>
    python3简单使用requests 用户代理,cookie池
    查看>>
    Python3组播通信编程实现教程(发送者+接收者)
    查看>>
    Python3编写网络爬虫10-数据存储方式三-CSV文件存储
    查看>>
    python3读取redis返回数据带有'b'的问题
    查看>>
    Python3连接MySQL
    查看>>
    Python关于isinstance函数的解析 | 附Demo(全)
    查看>>
    Python3:setup.py:完成所有任务的PIP安装(Build_ext+Install)
    查看>>
    python4.0 gil_Python 并发编程系列--1、浅谈GIL历史及对多线程的影响
    查看>>
    python60行绘图程序_天底下最简单的QT画图板,就一个类,60行代码
    查看>>
    Python: AES加密与解密
    查看>>
    Python: Range() 最大尺寸;动态的还是静态的?
    查看>>
    Python: Windows下用 multiprocessing 的深坑
    查看>>
    python:Could not find platform independent libraries <prefix>解决方法
    查看>>
    Python:datetime tzinfo 时区名称文档
    查看>>
    Python:deepcopy(list) vs new_list = old_list[:]
    查看>>
    Python:Google API - 从消息中获取 mimeTypes
    查看>>
    Python:Google API - 从消息中获取 mimeTypes
    查看>>
    Python:subprocess.call,stdout to file,stderr to file,在屏幕上实时显示stderr
    查看>>