P8883 幻想中成为原神

题目传送门)

这道题重点就在于“他允许你的答案与真正的答案有着不超过 2×104 的绝对误差”,从此可以引申出两种方法。


法一

由于误差较大,我们可以直接算概率。

我们考虑问题的反面,即有多少个数不是完全平方数的倍数。

对于一个质数 p,一个数是 p2 倍数的概率是 1p2,那不是 p2 倍数的概率就是 11p2

由乘法原理得不是完全平方数的概率为 p(1p2)

这时我们需要用到欧拉乘积公式:

nns=p(1ps)1

待入得

p(1p2)=1nn2

右边分母是所有正整数的平方倒数和,等于 π26,所以左边等于 6π2

因此一个数是完全平方数的倍数的概率即为 16π2,最终答案为 n(16π2).


法二

不难发现问题即求 ni=1nμ2(i)

而我们知道 i=1nμ2(i)=i=1nμ(i)ni2,于是我们直接估算,左 i=1nμ(i)ini=i=1n(μid1)(i),而又因为 (μid1)(n)=dnμ(d)d=dnμ(d)×ndn=φ(n)n,所以原式即 i=1nφ(i)i

i=1nφ(i)in 表示随机选取正整数对 (x,y) 使得 1xyn(x,y) 互质的概率,欧拉级数告诉我们它在 n+ 时约等于 6π2,因此答案约为 n(16π2)


#include<bits/stdc++.h>
#define LL long long
using namespace std;

const double pi=acos(-1.0);

LL n;

void mian()
{
	scanf("%lld",&n);
	double tmp=1.00-6.00/pi/pi;
	cout<<(LL)(1LL*n*tmp)<<endl;
}

int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
		mian();

	return 0;
}
posted @   xishanmeigao  阅读(28)  评论(0编辑  收藏  举报
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示