P3766 核心密码B
考虑到我完全不会数学。
我们考虑对于
如果
对于
struct Query{
ll k;
int id;
inline bool operator<(Query b) { return k < b.k; }
} q[Q];
__int128 qpw(__int128 a, ll b) {
__int128 ans = 1;
while (b) {
if (b & 1) ans = ans * a;
a = a * a, b >>= 1;
}
return ans;
}
long double ans[Q];
int T;
inline void solve(int x) {
int r = 2;
__int128 qr = qpw(r, x);
long double now = 0;
for (int i = 1; i <= T; i++) {
while (qr <= q[i].k) now += (long double)1.0 / qr, ++r, qr = qpw(r, x);
ans[q[i].id] += now;
}
}
inline long double calc(ll x) {
long double ta = 1.0 / 10000000 - (long double)(1.0) / (x + 1);
long double tb = 1.0 / (10000000 - 1) - (long double)(1.0) / x;
return (ta + tb) / 2;
}
int main() {
read(T);
for (int i = 1; i <= T; i++) read(q[i].k), q[i].id = i;
sort(q + 1, q + T + 1);
for (int i = 3; i <= 60 ;i++) solve(i);
for (int i = 1; i <= T; i++)
if (q[i].k > 100000000000000) {
int tmp = sqrtl(q[i].k);
ans[q[i].id] += calc(tmp);
q[i].k = 100000000000000;
}
solve(2);
for (int i = 1; i <= T; i++) printf("%.15Lf\n", ans[i]);
return 0;
}