#include <iostream>
#include <sstream>
#include <string>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cassert>

using namespace std;

#define FOR(i,k,n) for(int i=(k); i<(int)(n); ++i)
#define REP(i,n) FOR(i,0,n)
#define FORIT(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i)

template<class T> void debug(T begin, T end){ for(T i = begin; i != end; ++i) cerr<<*i<<" "; cerr<<endl; }
inline bool valid(int x, int y, int W, int H){ return (x >= 0 && y >= 0 && x < W && y < H); }

typedef long long ll;
const int INF = 100000000;
const double EPS = 1e-8;
const int MOD = 1000000007;
int dx[8] = {1, 0, -1, 0, 1, -1, -1, 1};
int dy[8] = {0, 1, 0, -1, 1, 1, -1, -1};

ll primes[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53};
ll UB;
double dfs(int idx, ll n, ll sigma, int e){
  //printf("dfs %d %lld %d\n", idx, n, last);
  double res = 1.0 * sigma / n;
  if(idx == 16) return res;
  ll n_sigma = sigma;
  for(int i = 0; i < e; i++){
    if(n * primes[idx] > UB) break;
    n *= primes[idx];
    n_sigma = n_sigma * primes[idx] + sigma;
    res = max(res, dfs(idx + 1, n, n_sigma, i + 1));
  }
  return res;
}
int main(){
  while(cin >> UB && UB) printf("%.16lf\n", dfs(0, 1, 1, 100));
  return 0;
}