题解 P6028 【算术】
NaCly_Fish · · 题解
其实这个题有一个非常 bullshit 的
首先题目中给出的式子很迷惑,随便推一下发现就是
然后就能得出一个除法分块式子
考虑每个
接下来就是最玄学的地方,直接把向下取整扔掉,式子变成
(当然这样是有误差的,最后调整一下即可)
对于身经百战见得多的同学,容易发现在
然后就能得到这么一份看起来非常扯淡,但就是能过的代码
#include<cstdio>
#include<iostream>
#include<cmath>
#define ll long long
#define reg register
#define pi 3.141592653589793
using namespace std;
int main(){
ll n;
long double ans = 0;
scanf("%lld",&n);
if(n<=1e6) for(reg int i=1;i<=n;++i) ans += 1.0/i * (n/i);
else ans = pi*pi/6*n - 10;
printf("%.9Lf",ans);
return 0;
}
ps:对于上面说到的这个式子
有很多有趣的证明方法,可以自己搞一搞