from copy import deepcopy, copy import sys import io from typing import Optional import time from random import randrange, randint, random, uniform import sys, io from collections import deque, defaultdict import heapq from collections import Counter import math from math import gcd from functools import lru_cache from itertools import combinations, permutations from bisect import bisect_left, bisect_right from itertools import groupby from itertools import accumulate from math import factorial import decimal import math # from sortedcontainers import SortedList # import pypyjit # pypyjit.set_param("max_unroll_recursion=-1") sys.setrecursionlimit(1000000000) sys.set_int_max_str_digits(1000000000) start_time = time.time() N = int(input()) def divisor(n) -> list: sq = n**0.5 border = int(sq) table = [] bigs = [] for small in range(1, border + 1): if n % small == 0: table.append(small) big = n // small bigs.append(big) if border == sq: # nが平方数 bigs.pop() table += reversed(bigs) return table divs = divisor(N) divs = sorted(divs) dp = defaultdict(int) for i in range(len(divs)): n = divs[i] if n == 1: continue divs_now = divisor(n) divs_now = list(reversed(sorted(divs_now))) counter = defaultdict(int) for j in range(len(divs_now)): counter[divs_now[j]] += n // divs_now[j] for k in range(j): if divs_now[k] % divs_now[j] == 0: counter[divs_now[j]] -= counter[divs_now[k]] for num in counter: if num == n: continue dp[n] += 1 / n * counter[num] * dp[num] dp[n] += 1 dp[n] *= (n) / (n - 1) print(dp[N])