// |--------------------------------------------|
// | User - Kunal Kumar                         |
// |--------------------------------------------| 

#include <bits/stdc++.h>
#define pb push_back
#define mk make_pair
#define pf push_front
#define ppf pop_front
#define pii pair<int,int>
#define ll long long
#define pll pair<ll,ll>
#define ulli unsigned long long int
#define vi vector<int>
#define vl vector<ll>
#define vulli vector<ulli>
#define vb vector<bool>
#define vpii vector<pii>
#define vpll vector<pll>
#define mod 1000000007
#define N 200001
#define modu 998244353
#define rep(i,a,b) for(int i=a;i<b;i++)
#define rrep(i,a,b) for(int i=a-1;i>=b;i--)
#define INF 1e18
#define all(a)  (a).begin(),(a).end()
#define rall(a) (a).rbegin(),(a).rend()
#define ppc __builtin_popcount
#define ppcll __builtin_popcountll
#define endl "\n"
using namespace std;
 
int gcd(int a, int b)
{
    if(b==0)
        return a;
    
    return gcd(b,a%b);
}

//seive
bool prime_num[1000001];
void SOE(vector <int> &v)
{
    int n = 1000000;
    memset(prime_num, true, sizeof(prime_num));
 
    for (int p = 2; p * p <= n; p++)
    {
        if (prime_num[p] == true) 
        {
            for (int i = p * p; i <= n; i += p)
                prime_num[i] = false;
        }
    }
    
    
    for (int p = 2; p <= n; p++)
        if (prime_num[p])
            v.pb(p);
}
 
bool binary_search(vector <int> v,int s, int e,int num)
{
    while(s<=e)
    {
        int mid=(s+(e-s)/2);
        
        if(v[mid]==num)
            return true;
        else
        if(v[mid]>num)
            e=mid-1;
        else
            s=mid+1;
    }
    
    return false;
}
 
ll power(ll x, ll y, ll p)
{
    ll res = 1; 
    x = x % p; 
    while (y > 0) 
    {     
        if (y & 1)
            res = (res * x) % p;
        y = y >> 1; // y = y/2
        x = (x * x) % p;
    }
    return res;
}
 
ll modInverse(ll n,ll p)
{
    return power(n, p - 2, p);
    
    /*
    ll inv[maxn],finv[maxn];
    inv[1] =inv[0]= 1;
    finv[0]=finv[1]=1;
    for (int i=2; i<maxn; ++i)
        inv[i] = (m - (m/i) * inv[m%i] % m) % m;
        
    for (int i=2;i<maxn;++i){
        finv[i]=(inv[i]%m * finv[i-1]%m)%m;
    }

    */
}
 
ll factorial[200001];
ll nCr(ll n, ll r, ll p)
{
    if (n < r)
        return 0;
    if (r == 0)
        return 1;
 
    return (factorial[n] * (modInverse(factorial[r], p) % p) * (modInverse(factorial[n - r], p) % p))% p;
}

void addEdge(vector <int> G[], int s, int e )
{
    G[s].pb(e);
    G[e].pb(s);
}


void solve()
{
   ll n;
   cin>>n;
   
   double sum = 0.00;
   rep(i,1,n)
   {
       double val = (double)(1.0*i)/(double)(n*1.0);
       sum+= (double)(1.0)/(double)(val*1.0);
   }
   cout<<fixed<<setprecision(11)<<sum;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    
    int t;
    t=1;
    //cin>>t;
    
    

    while(t--)
    {
        solve();
    }

}



// Keep Hustling!!!!!!!!!!!
#include "bits/stdc++.h"
#include<sstream>
using namespace std;
typedef long long ll;
#define _USE_MATH_DEFINES
#include <math.h>
#define NIL = -1;
#define all(x) x.begin(),x.end()
const ll INF = 1e9;
const long long inf = 1e18;
const ll INFL = 1e18;
const ll MOD = 1e9 + 7;

int digit(ll x) {
    int digits = 0;
 
    while(x > 0){
        x /= 10;
        digits++;
    }
 
    return digits;
}
 
ll gcd(long long a,long long b) {
    if (a < b) swap(a,b);
    if (b == 0) return a;
    
    return gcd(b,a%b);
}
 
bool is_prime(long long N){
    if (N == 1) return false;
    for (long long i = 2;i * i <= N;i++){
        if (N % i == 0) return false;
    }
    return true;
}
 
ll lcm(ll a,ll b){
    return ((a * b == 0)) ? 0 : (a / gcd(a,b) * b);
}
 
double DegreeToRadian(double degree){
    return degree * M_PI / 180.0;
}
 
long long modpow(long long a, long long b, long long m){
    long long ans = 1;
    while(b > 0){
        if (b % 2 == 1){
            ans *= a;
            ans %= m;
        }
        a *= a;
        a %= m;
        b /= 2;
    }
    return ans;
}

long long comb(long long x, long long y){
    int z;
    if (y == 0) return 1;
    else {
        z = modpow(x, y/2, MOD)*modpow(x, y/2, MOD)%MOD;
        if (y % 2 == 1) z = z*x%MOD;
        return z;
    }
}

vector<long long> fact(long long x){
    vector<long long> res;
    for(int i = 1;i*i <= x;i++){
        if (x % i == 0){
            res.push_back(i);
            res.push_back(x / i);
        }
    }

    return res;
}

bool isprime(int p){
    if (p == 1) return false;
    for(int i = 2;i < p;i++){
        if (p % i == 0){
            return false;
        }
    }
    return true;
}

vector<pair<long long, long long>> prime_fact(long long x){
    vector<pair<long long, long long>> res;
    for(int i = 2;i*i <= x;i++){
        if (x % i == 0){
            long long cnt = 0;
            while(x % i == 0){
                cnt++;
                x /= i;
            }
            res.push_back({i, cnt});
        }
    }
    if (x != 1){
        res.push_back({x, 1});
    }
    return res;
}

int64_t mod_inv(int64_t a, int64_t m){
    int64_t b = m, u = 1, v = 0;

    while(b){
        int64_t t = a/b;
        a -= t*b;
        swap(a, b);
        u -= t*v;
        swap(u, v);
    }
    u %= m;
    if (u < 0) u += m;

    return u;
}


// {g, x, y}: ax + by = g
tuple<long long, long long, long long> extgcd(long long a, long long b){
    if (b == 0) return {a, 1, 0};
    long long g, x, y;
    tie(g, x, y) = extgcd(b, a % b);
    return {g, y, x - a/b*y};
}

int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};

//////////////////////////

int main(){
    double n;
    double ans = 0;
    cin >> n;
    for(double i = 1; i < n;i++){
        ans += n / (n - i);
    }

    cout << setprecision(10) << ans << endl;
}