简单数学——星之影

星之影-垃圾推式子

简而言之,本题题意为求:

x=1n1x4+12

观察这个式子,我们会发现, x4 增长非常慢,于是可以采用类似于数论分块的思想

很明显, x4+12 的值是非严格单调递增的,且取1,2,3,4,

下面我们来思考这个式子的值为 m 的时候, x 的取值范围,容易发现, x 最小可以是当 x4+12=m ,也即 x=(2m12)4 由于 m 是整数, x 是整数,可以知道 x 最大取到 x=(2m+12)41 ,这里一共有取值总数:

(2m+12)41(2m12)4+1=4m3+m

故对于一个足够大的 n ,当 x4+12=m 时,m的总贡献为: 4m2+1 ,所以说,我们设 a 是对于 n 来说,满足 k=1a(4k3+k)n 的最大的 a ,这意味着我们可以直接对 1a 的贡献进行求和,写成式子即这部分贡献为:

k=1a1k·(4k3+k)=4k=1ak2+k=1a1=2a(a+1)(2a+1)+3a3

那么对于答案来说,剩下的部分即为值为 a+1 的部分,这个部分的总数量即为 1n 的数量减去 1a 中每个数出现的次数,写成式子即为:

nm=1a(4m3+m)=n4m=1am3a(a+1)2=na2(a+1)2a(a+1)2

其总贡献为:

1a+1(na2(a+1)2a(a+1)2)

故,此时我们便可以计算出答案:

2a(a+1)(2a+1)+3a3+1a+1(na2(a+1)2a(a+1)2)

我们发现,现在我们的问题就是如何求出 a 的值

笔者在考场上,暂时没有想出,于是由于 a 的值具有单调性于是二分答案做的,此种做法已经可以通过本题,但本题还有O(1)做法

我们想想,对于 a 的定义是什么,很明显,是满足 k=1a(4k3+k)n 的最大的 a ,化简这个和式,有:

a2(a+1)2+a(a+1)2n

我们使用换元法求解这个方程,很明显,令 t=a(a+1) ,则原方程化为: t2+t2n ,由于t肯定是一个正数,可以解得 0<t1+16n14 ,带回 a ,可以解得 0<a1+16n412 ,根据 a 的定义,有 a=1+16n412 也即 a+1=1+16n4+12

所以说,我们可以 O(1) 的计算每一次的答案,不需要任何的预处理,这道题的答案写成最终形式就是:

i=1n1x4+12=2a(a+1)(2a+1)+3a3+1a+1(na2(a+1)2a(a+1)2)

其中 a=1+16n412

那么程序也就不难实现了:

#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));
	}
}

注:

  1. 程序中代码是求的a+1
  2. i=0ni2=n(n+1)(2n+1)6
  3. i=0ni3=n2(n+1)24
  4. 前面两个式子可以试着推一推

练习题:

求:

k=0nk

k=1n1k

这个甚至比上一个更加简单,只需要套一下就行

posted @   spdarkle  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示