博客
关于我
lightoj1245——规律题
阅读量:650 次
发布时间:2019-03-15

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

调和级数的这一变形问题需要计算n除以1到n的所有整数的和:H(n) = n/1 + n/2 + n/3 + ... + n/n。对于大型n,直接计算会出现浮点精度问题,因此需要一种更有效且精确的方法。

计算方法

要高效解决这个问题,可以采用以下步骤:

  • 计算前sqrt(n)项和:直接逐一相加这些项,计算相对简单。
  • 计算后续项和:这些项中每一项的值都小于sqrt(n)。对于每个可能的值m,确定项的个数,然后乘以其项值求和。
  • 实现步骤

  • 计算sqrt(n):先求出n的平方根值m。
  • 处理前m项:问对每个i从1到m,累加n/i。
  • 处理m+1到n的项:找到每个可能的m值,计算对应的i范围,然后确定有多少个这样的i。
  • 调整重复计算的值:当n是完全平方数时,对于m的值会被计算两次,需要减去一次重复的计数。
  • 样例分析

    以n=10为例:

    • sqrt(10)=3
    • 前3项和为10 +5 +3=18
    • 后续m=1的项有i=4到10(共5项),贡献总和为1*5=5
    • m=2的项有i=3和10/5=2,但需检查范围
    • 最终总和为18+5+...=23

    代码实现

    #include 
    #include
    using namespace std;long long harmonic(long long n) { long long m = (long long)sqrt(n); long long ans = 0; // 前sqrt(n)项的和 for (long long i = 1; i <= m; ++i) { ans += n / i; // 处理后续项:m+1到m的范围 long long l = n / i; long long r = n / (i + 1); if (l > r) { ans += (l - r) * i; } } // 确定是否是完全平方数,进行调整 if (n / m == m) { ans -= m; } return ans;}int main() { int T; long long n; int case_num = 1; scanf("%d", &T); while (T--) { scanf("%lld", &n); long long ans = harmonic(n); printf("Case %d: %lld\n", ++case_num, ans); } return 0;}

    这段代码分为前sqrt(n)项和后续项的处理,通过减少计算次数,确保了在大n情况下的效率和精度。

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

    你可能感兴趣的文章
    Prometheus pushgateway使用详解
    查看>>
    Prometheus 云原生 - Prometheus 数据模型、Metrics 指标类型、Exporter 相关
    查看>>
    Prometheus 云原生 - 基于 file_sd、http_sd 实现 Service Discovery
    查看>>
    Prometheus 云原生 - 微服务监控报警系统 (Promethus、Grafana、Node_Exporter)部署、简单使用
    查看>>
    Prometheus 云原生 - 监控 Linux、MySQL、Redis、RabbitMQ、Docker、SpringBoot 3.x
    查看>>
    Prometheus 介绍
    查看>>
    Prometheus 安全配置详解
    查看>>
    prometheus 安装node_exporter, node_exporter 安装最新版 普罗米修思安装监控服务器client
    查看>>
    Prometheus 安装部署实战
    查看>>
    prometheus 持久化存储方案
    查看>>
    Prometheus 监控系统企业级实战
    查看>>
    Prometheus 监控系统简介
    查看>>
    Prometheus 配置详解
    查看>>
    Prometheus 采集器使用详解
    查看>>
    Prometheus 黑盒监控实战
    查看>>
    prometheus+alertmanager+grafana监控部署教程
    查看>>
    Prometheus+Grafana构建智能化Kubernetes监控系统实战
    查看>>
    Prometheus+SpringBoot应用监控全过程详解
    查看>>
    Prometheus+SpringBoot应用监控全过程详解
    查看>>
    prometheus安装
    查看>>