题目描述
蒜头君有一个长度为 n 的数列,第i 个数为ai 。花椰妹最近对质数很感兴趣,所以花椰妹向蒜头君提出了 Q 个问题,对于每个问题,花椰妹想知道蒜头君的这个数列中区间[l,r] 中质数的个数。 质数是指在大于1 的自然数中,除了1 和它本身以外不再有其他因数的自然数,例如 1,2,...,3,5,7,11,....。
本来以为就是一道简单的函数题结果第二各样里给我整蒙了,感觉自己连题都没看懂。
input 2
10
2 43 45 4 234 54 65 11 79 57
5
2 4
3 8
5 10
1 3
1 10
output 2
1
1
2
2
4
样例解释2 区间 [2,4] 中共有 1 个质数,分别为:{43};
区间 [3,8] 中共有 1 个质数,分别为:{11};
区间 [5,10] 中共有 2 个质数,分别为:{11,79};
区间 [1,3]中共有 2 个质数,分别为:{2,43};
区间 [1,10]中共有 4 个质数,分别为:{2,43,11,79};
code:
#include<bits/stdc++.h>
using namespace std;
long long n,a[100010],l,r,m,sum=0;
bool zhishu(int x){
if(x==1) return 1;
for(int i=2;i<=sqrt(x);i++){
if(x%i==0) return 1;
}
return 0;
}
int main(){
freopen("prime.in","r",stdin);
freopen("prime.out","w",stdout);
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
scanf("%lld",&m);
for(int i=1;i<=m;i++){
scanf("%lld%lld",&l,&r);
for(int j=l;j<=r;j++){
if(zhishu(j)==0) sum++;
}
printf("%lld\n",sum);
sum=0;
}
return 0;
}