#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:268435456")
bool ascending(int i, int j) { return (i < j); }
bool descending(int i, int j) { return (i > j); }
using namespace std;
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long M[110];
long long R[110];
int main() {
  cout << setprecision(10) << fixed;
  long long a = 1;
  int n;
  cin >> n;
  for (int(i) = 0; (i) < (n); (i)++) cin >> M[i];
  for (int(i) = 0; (i) < (n); (i)++) cin >> R[i];
  for (int(i) = 0; (i) < (n); (i)++) a = (a * M[i]) / gcd(a, M[i]);
  long long cur = 0;
  for (int(i) = 0; (i) < (a); (i)++) {
    bool flag = false;
    for (int(j) = 0; (j) < (n); (j)++) {
      if (i % M[j] == R[j]) flag = true;
    }
    if (flag) cur++;
  }
  cout << (long double)1.0 * cur / a << endl;
}
