• Harmonic Number (II) LightOJ


    题意:

    求前n项的n/i  的和 只取整数部分

    暴力肯定超时。。。然后 。。。现在的人真聪明。。。我真蠢

    觉得还是别人的题意比较清晰

    比如n=100的话,i=4时n/i等于25,i=5时n/i等于20,于是在大于20到小于等于25内的5个数字j都有n/j等于4,然后ans+=4*5

    所以我们可以在小于等于根号n的范围内枚举i,ans+=n/i,然后ans+=(n/(i)-n/(i+1))*i,这样分段加起来

    但是又重复的部分。。

    即 令m = sqrt(n), 如果n / m == m 则n / (m+1) == m-1  所以在循环进行到最后一项 即m时 n/i - n/(i+1)等于 1 所以在执行 res += (n/i - n/(i+1))*i时(即 res += 1*m 时)多加了一个m

    所以要最后判断一下 减去

    例如 1、2、3、4、5、6、7、8、9、10 

    sqrt(10)= 3

    所以 最后应该是1个10   1个5   1个3   2个2   5个1

    但在循环执行到i=3 时  多加了一个3

    若还不懂  具体看看代码  自己写一下

    #include <iostream>
    #include <cstdio>
    #include <sstream>
    #include <cstring>
    #include <map>
    #include <set>
    #include <vector>
    #include <stack>
    #include <queue>
    #include <algorithm>
    #include <cmath>
    #define MOD 2018
    #define LL long long
    #define ULL unsigned long long
    #define maxn 100009
    #define Pair pair<int, int>
    #define mem(a, b) memset(a, b, sizeof(a))
    #define _  ios_base::sync_with_stdio(0),cin.tie(0)
    //freopen("1.txt", "r", stdin);
    using namespace std;
    const int LL_INF = 0x7fffffffffffffff,INF = 0x3f3f3f3f;
    
    int main()
    {
        int T;
        cin>> T;
        int cnt = 0;
        while(T--)
        {
            LL n, res = 0;
            cin>> n;
            LL m = sqrt(n);
            for(LL i=1; i<=m; i++)
            {
                res += n/(double)i;
                res += (n/i - n/(i+1)) * i;
            }
            if(n/m == m)
                res -= m;
            printf("Case %d: %lld
    ",++cnt,res);
    
        }
    
    
        return 0;
    }
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    AtCoder Regular Contest 086 E
    bzoj3192: [JLOI2013]删除物品(树状数组)
    bzoj5118: Fib数列2(费马小定理+矩阵快速幂)
    bzoj2314: 士兵的放置(树形DP)
    bzoj1907: 树的路径覆盖(树形DP)
    最小割 总结&&做题记录
    最大流 总结&&做题记录
    网络流24题之太空飞行计划
    网络流24题之负载平衡问题
    网络流24题之飞行员配对方案
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/9184774.html
Copyright © 2020-2023  润新知