#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; // 行列の積 template vector > matrixProduct(const vector >& x, const vector >& y) { int a = x.size(); int b = x[0].size(); int c = y[0].size(); vector > z(a, vector(c, 0)); for(int i=0; i vector > matrixPower(const vector >& x, long long k) { int n = x.size(); vector > y(n, vector(n, 0)); for(int i=0; i > z = x; while(k > 0){ if(k & 1) y = matrixProduct(y, z); z = matrixProduct(z, z); k >>= 1; } return y; } int main() { vector > dp(7); for(int i=1; i<=6; ++i){ for(int j=i-6; j<=i-1; ++j){ if(j < 0){ dp[i].first += 1.0 / 6.0; dp[i].second += 1.0 / 6.0; } else{ dp[i].first += (dp[j].first + 1.0) / 6.0; dp[i].second += dp[j].second / 6.0; } } } vector > a(7, vector(7, 0.0)); vector > b(6, vector(6, 0.0)); for(int i=0; i<6; ++i){ a[0][i] = 1.0 / 6.0; b[0][i] = 1.0 / 6.0; } for(int i=0; i<5; ++i){ a[i+1][i] = 1.0; b[i+1][i] = 1.0; } a[0][6] = 1.0; a[6][6] = 1.0; int t; cin >> t; while(--t >= 0){ long long n; cin >> n; if(n <= 6){ cout << dp[n].first / (1 - dp[n].second) << endl; continue; } vector > c = matrixPower(a, n - 6); vector > d = matrixPower(b, n - 6); double x = 0.0; double y = 0.0; for(int i=0; i<6; ++i){ x += c[0][i] * dp[i+1].first; y += d[0][i] * dp[i+1].second; } x += c[0][6]; double ans = x / (1 - y); printf("%.12f\n", ans); } return 0; }