avatar
fireworks99
keep hungry keep foolish

LightOJ 1245 Harmonic Number调和数

Description

计算

Harmonic Number

画图,画出函数图像:y = n/x,以 y = x对称(以n == 5为例)

y = 5 / x

可以用 横坐标表示i 从该点画一条垂直的线

这条线上的所有整数点的个数就是 n / i

那么n / 1 + n / 2 + n / 3 + …… n / (n-2) + n / (n-1) + n / n

可以表示为方程的曲线与坐标轴围成的面积内的整数点的个数

对称,求左边梯形内点数,乘2减去重叠的那部分

部分原文链接:https://blog.csdn.net/weixin_43237242/article/details/88780203

Code

int main()
{
    int t, n, cnt = 1;;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d", &n);
        ll ans = 0;
        int tem = sqrt(n);
        for(int i = 1; i <= tem; ++i)
            ans += n / i;
        ans <<= 1;
        ans -= tem * tem;
        printf("Case %d: %lld\n", cnt++, ans);
    }
    return 0;
}
Site by Baole Zhao | Powered by Hexo | theme PreciousJoy