[洛谷1920]成功密码

题目大意:
求$displaystyle{sum_{i=1}^{n}frac{x^i}{i}}$的值。
思路:
考虑暴力模拟:时间复杂度$O(n)$,看起来不错,然而$nleq 10^{18}$,肯定会超时,实测只有30分。
观察题目发现题目所求的算式与泰勒展开公式极其相似,所以可以先算出$lim=-ln(1-x)$的值。
由于题目要求的是四位小数,所以当答案$ans$保留四位小数与$lim$相等时,后面的运算已经失去了意义,直接输出结果即可。

 1 #include<cmath>
 2 #include<cstdio>
 3 int main() {
 4     double x;
 5     long long n;
 6     scanf("%lf%lld",&x,&n);
 7     double lim=-log(1-x);
 8     double ans=0;
 9     double t=1;
10     for(long long i=1;i<=n;i++) {
11         ans+=(t*=x)/i;
12         if(round(lim*10000)==round(ans*10000)) break;
13     }
14     printf("%.4lf
",ans);
15     return 0;
16 } 
原文地址:https://www.cnblogs.com/skylee03/p/7363579.html