#include #include #include #include using namespace std; void preprocess(int N, const vector& A, unordered_map>& multiples) { for (int idx = 0; idx < N; ++idx) { int value = A[idx]; for (int k = 1; k <= 100000; ++k) { if (value % k == 0) { multiples[k].push_back(idx + 1); // store 1-based index } } } } int count_multiples_in_range(const unordered_map>& multiples, int L, int R, int K) { if (multiples.find(K) == multiples.end()) return 0; const vector& indices = multiples.at(K); auto left = lower_bound(indices.begin(), indices.end(), L); auto right = upper_bound(indices.begin(), indices.end(), R); return distance(left, right); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int N, Q; cin >> N >> Q; vector A(N); for (int i = 0; i < N; ++i) { cin >> A[i]; } unordered_map> multiples; preprocess(N, A, multiples); for (int i = 0; i < Q; ++i) { int L, R, K; cin >> L >> R >> K; cout << count_multiples_in_range(multiples, L, R, K) << '\n'; } return 0; }