逃课未遂

P1035 [NOIP2002 普及组] 级数求和

MCXCC @ 2024-02-09 12:00:25

#include "stdio.h"
#include "math.h"

int main() {
    int k;
    scanf("%d", &k);
    printf("%d",(int )(floor(exp(k)-0.5)));
    return 0;
}

想起来高数上讲过调和级数求和的近似值,γ大概是0.5的样子吧,然后全红(逃

公式贴一个在这里

\sum_{i=1}^{n}\frac{1}{i}=\ln(n+1)+\gamma

虽然最后解出来了但是还是想知道这个思路可行否


by luogu_gza @ 2024-02-09 12:08:28

@MCXCC 在较小的 k 时误差较大。


by huangruiheng0217 @ 2024-02-09 12:09:06

试了一下,取更精确的 e 可以得 40-60 分


by huangruiheng0217 @ 2024-02-09 12:10:43

@MCXCC 下面这个代码奇奇怪怪过了。。

#include<bits/stdc++.h>
using namespace std;
int main() {
    double k;
    cin>>k;
    k-=0.577215664901;
    double ans=exp(k)-1;
    cout<<ceil(ans+0.577215664901)<<endl;
    return 0;
}

by MCXCC @ 2024-02-09 13:23:11

@huangruiheng0217 刚看了一下,应该是\ln(1+n-\gamma)+\gamma 向上取整的时候把\ln(n+1)n之间的误差消掉了

但不清楚为什么精度这么高


by MCXCC @ 2024-02-09 13:30:45

@huangruiheng0217 破案了,这两个函数一开始误差大,后面小

结果误差大的地方刚好都取在小数部分,完美地避开了整数点,抽象


by huangruiheng0217 @ 2024-02-09 13:57:04

@MCXCC 哦 但是这个题暴力也很优秀。。。


|