#include <bits/stdc++.h>
using namespace std;
template <typename T>
void chmax(T& a, const T& b) {
  if (a < b) a = b;
}
template <typename T>
void chmin(T& a, const T& b) {
  if (b < a) a = b;
}
int N;
const long long INF = 1e17;
long long dp[1 << 10];
long long solve(int M, vector<long long>& bit, vector<long long>& C) {
  fill(dp, dp + (1 << M), INF);
  dp[0] = 0;
  for (int mask = 0; mask < (1 << M) - 1; mask++) {
    for (int i = (0); i < (N); i++) {
      chmin(dp[mask | bit[i]], dp[mask] + C[i]);
    }
  }
  return dp[(1 << M) - 1];
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  cin >> N;
  vector<long long> L(N), C(N);
  for (int i = (0); i < (N); i++) {
    cin >> L[i];
  }
  for (int i = (0); i < (N); i++) {
    cin >> C[i];
  }
  long long ans = INF;
  for (int i = (0); i < (N); i++) {
    vector<long long> fact;
    long long t = L[i];
    for (int j = 2; j * j <= t; j++) {
      if (t % j == 0) {
        fact.push_back(j);
        while (t % j == 0) t /= j;
      }
    }
    if (t > 1) fact.push_back(t);
    int M = fact.size();
    vector<long long> bit(N);
    for (int j = (0); j < (N); j++)
      if (j != i) {
        for (int k = (0); k < (M); k++) {
          if (L[j] % fact[k]) {
            bit[j] |= 1 << k;
          }
        }
      }
    chmin(ans, solve(M, bit, C) + C[i]);
  }
  cout << (ans != INF ? ans : -1) << endl;
  return 0;
}
