Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 1e7 + 3;
- int n, a[N] = {0}, amax = 0, b[N] = {0};
- int prime[N];
- void Sieve() {
- for (int i = 2; i <= (int) 1e7; ++i) prime[i] = i;
- for (int i = 2; i <= (int) 1e7; ++i) {
- if (prime[i] == i) {
- for (int j = 2; i * j <= (int) 1e7; ++j) {
- prime[i * j] = min(prime[i * j], i);
- }
- }
- }
- }
- void Fac(int x) {
- while (x > 1) {
- int k = prime[x];
- while (x % k == 0) x /= k;
- //cerr << k << ' ';
- ++b[k];
- }
- }
- int main() {
- scanf("%d", &n);
- Sieve();
- for (int i = 0; i < n; ++i) {
- int x; scanf("%d", &x);
- Fac(x);
- }
- int m; scanf("%d", &m);
- for (int i = 1; i <= int(1e7); ++i) b[i] = b[i - 1] + b[i];
- while (m--) {
- int l, r; scanf("%d%d", &l, &r);
- r = min(r, (int) 1e7);
- if (l > r) printf("0\n"); else
- printf("%d\n", b[r] - b[l - 1]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement