简单数学——星之影
星之影-垃圾推式子
简而言之,本题题意为求:
观察这个式子,我们会发现,
很明显,
下面我们来思考这个式子的值为
故对于一个足够大的
那么对于答案来说,剩下的部分即为值为
其总贡献为:
故,此时我们便可以计算出答案:
我们发现,现在我们的问题就是如何求出
笔者在考场上,暂时没有想出,于是由于
我们想想,对于
我们使用换元法求解这个方程,很明显,令
所以说,我们可以
其中
那么程序也就不难实现了:
#include<iostream>
#include<cstdio>
#include<cmath>
#define int long long
int n,m,t;
int get(int x){//求1/1~1/n的所有项的和
return (2*x*(x+1)*(x*2+1)+3*x)/3;
}
int count(int x){
return x*x*(x+1)*(x+1)+x*(x+1)/2;
}
int find(int n){//寻找第n个数是属于a的哪一个元素
return (sqrt(sqrt(1.0+16.0*n))+1)/2;
}
double solve(int t){
double ans=0;
int now=find(t);
// printf("%lld \n",now);
ans+=get(now-1);
ans+=1.0*(t-count(now-1))/now;
return ans;
}
typedef long long ll;
char buf_ans[114];
ll next_n(double last_ans=0,ll get_n=0){
//last_ans<n<=1e18
sprintf(buf_ans,"%.6f",last_ans);
for(ll i=0,x=0;;i++){
if(buf_ans[i]=='.')return get_n^x;
if(i&1)x*=10;
else x=x*10+(buf_ans[i]^48);
}
}
signed main(){
scanf("%lld",&t);
double lst=0;
while(t--){
int x;
scanf("%lld",&x);
x=next_n(lst,x);
printf("%.6f\n",lst=solve(x));
}
}
注:
- 程序中代码是求的a+1
- 前面两个式子可以试着推一推
练习题:
求:
这个甚至比上一个更加简单,只需要套一下就行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!