#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
int n, l[500], c[500];
map<pair<int, int>, int> mem;
int dp(int g, int i) {
  if (mem.count(make_pair(g, i)))
    return mem[make_pair(g, i)];
  else if (i == n)
    return g == 1 ? 0 : 1000000000;
  else {
    int res = dp(g, i + 1);
    res = min(res, dp(gcd(g, l[i]), i + 1) + c[i]);
    return mem[make_pair(g, i)] = res;
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d", &l[i]);
  for (int i = 0; i < n; i++) scanf("%d", &c[i]);
  int ans = dp(0, 0);
  if (ans >= 1000000000)
    printf("-1\n");
  else
    printf("%d\n", ans);
  return 0;
}
