博客
关于我
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/

    你可能感兴趣的文章
    Objective-C实现simpson rule辛普森法则算法(附完整源码)
    查看>>
    Objective-C实现simulated annealing模拟退火算法(附完整源码)
    查看>>
    Objective-C实现SinglyLinkedList单链表算法(附完整源码)
    查看>>
    Objective-C实现SizeBalancedTree大小平衡树(附完整源码)
    查看>>
    Objective-C实现skew heap倾斜堆算法(附完整源码)
    查看>>
    Objective-C实现Skip List跳表算法(附完整源码)
    查看>>
    Objective-C实现slack message松弛消息算法(附完整源码)
    查看>>
    Objective-C实现SlopeOne算法(附完整源码)
    查看>>
    Objective-C实现slow sort慢排序算法(附完整源码)
    查看>>
    Objective-C实现smo算法(附完整源码)
    查看>>
    Objective-C实现SNTP协议(附完整源码)
    查看>>
    Objective-C实现sobel filter索贝尔过滤器算法(附完整源码)
    查看>>
    Objective-C实现Sobel算子(附完整源码)
    查看>>
    Objective-C实现Sobel算子(附完整源码)
    查看>>
    Objective-C实现sobel边缘检测算法(附完整源码)
    查看>>
    Objective-C实现sock merchant袜子商人问题算法(附完整源码)
    查看>>
    Objective-C实现Softmax 函数的实现算法(附完整源码)
    查看>>
    Objective-C实现softmax函数功能(附完整源码)
    查看>>
    Objective-C实现stooge sort臭皮匠排序算法(附完整源码)
    查看>>
    Objective-C实现strand sor链排序排序算法(附完整源码)
    查看>>