#pragma GCC optimize("O3") #pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt") #include using namespace std; using ll = long long; constexpr ll MOD = 1e9 + 7; //#define int long long #define f(i,a,b) for(int i = (a); i < (b); ++i) #define f(i,a,b) for(int i = (a); i < (b); ++i) #define rep(i,a,b) for(int i = (a); i < (b); ++i) #define sz(a) (a).size() #define all(x) begin(x), end(x) typedef pair pii; typedef vector vi; vi a; array sd{}; vi primes; array cnt{}; void add(int ind, int end) { int val = a[ind]; while (val != 1) { ++cnt[sd[val]]; val /= sd[val]; } } void del(int ind, int end) { int val = a[ind]; while (val != 1) { --cnt[sd[val]]; val /= sd[val]; } } bool calc(int k) { if (k == 1) return true; int last = sd[k], cl = 0; int val = k; while (val != 1) { if (last != sd[val]) { if (cnt[last] < cl) return false; cl = 0; last = sd[val]; } ++cl; val /= sd[val]; } return cnt[last] >= cl; } vi mo(vector Q, vector& nums) { int L = 0, R = 0, blk = 350; vi s(sz(Q)); vi res = s; #define K(x) pii(x.first/blk, x.second ^ -(x.first/blk & 1)) iota(all(s), 0); sort(all(s), [&](int s, int t){return K(Q[s]) < K(Q[t]); }); for (int qi : s) { pii q = Q[qi]; while (L > q.first) add(--L, 0); while (R < q.second) add(R++, 1); while (L < q.first) del(L++, 0); while (R > q.second) del(--R, 1); res[qi] = calc(nums[qi]); } return res; } int main() { cin.tie(0)->sync_with_stdio(0); iota(sd.begin(), sd.end(), 0); for (int i = 2; i <= 1000000; ++i) { if (sd[i] < i) continue; //primes.push_back(i); for (int j = 2 * i; j <= 1000000; j += i) { if (sd[j] < i) continue; sd[j] = i; } } int n; cin >> n; a.resize(n); for (int &i : a) cin >> i; int q; cin >> q; vector> queries; vector nums; while (q--) { int s, t, k; cin >> s >> t >> k; ++t; queries.emplace_back(s - 1, t - 1); nums.push_back(k); } vector res = mo(queries, nums); for (int i : res) { if (i) cout << "Yes\n"; else cout << "No\n"; } return 0; } /* 8 2 3 6 12 4 8 16 4 8 2 4 72 1 8 7 1 4 16 1 4 32 4 4 6 5 5 4 2 5 864 2 5 1296 */