#include #include #include #include using namespace std; const int N = 100010, M = 2010; bitset is_comp; vector primes; int n, q, a[N], ps_cnt[N][310], zero_cnt[N]; void EulerSieve() { is_comp[0] = is_comp[1] = true; for (int i = 2; i < M; ++i) { if (!is_comp[i]) primes.push_back(i); for (auto p : primes) { if (1LL * i * p >= M) break; is_comp[i * p] = true; if (i % p == 0) break; } } } int main() { // freopen("apple.in", "r", stdin); // freopen("apple.out", "w", stdout); EulerSieve(); scanf("%d", &n); for (int i = 1; i <= n; ++i) { scanf("%d", &a[i]); zero_cnt[i] = zero_cnt[i - 1] + (a[i] == 0); if (a[i] == 0) continue; int x = a[i]; for (int j = 0; j < primes.size(); ++j) { int p = primes[j]; ps_cnt[i][j] = ps_cnt[i - 1][j]; while (x % p == 0) { ++ps_cnt[i][j]; x /= p; } } } scanf("%d", &q); while (q--) { int p, l, r; scanf("%d%d%d", &p, &l, &r); int zeros = zero_cnt[r] - zero_cnt[l - 1]; if (zeros) puts("Yes"); else { for (int i = 0; i < primes.size(); ++i) { int pp = primes[i]; int cnt = ps_cnt[r][i] - ps_cnt[l - 1][i]; while (cnt && (p % pp == 0)) { p /= pp; --cnt; } } if (p == 1) puts("Yes"); else puts("NO"); } } return 0; }