/* 计算整数[m,n]之间由多少个素数,2<=m<n<1000.注意[m,n]是闭区间
输入 第一行输入一个正整数n接下来n行,每行依次输入整数m,n,以空格分开
输出 输出n行每行输出对应的素数个数 */
//法一
#include<iostream>
#include<cmath>
bool isPrime(int x);
using namespace std;
int main(){
int num;
cin>>num;
while(num--){ //输入num行
int m,n;
cin>>m>>n;
int cnt=0;
for(int i=m;i<=n;i++){ //注意是闭区间
if(isPrime(i)){ //bool函数的引用
cnt++;
}
}
cout<<cnt<<endl;
}
return 0;
}
bool isPrime(int x){
for(int i=2;i<(int)(sqrt(x))+1;i++){ //这样可以减少循环次数从而减少计算量
//因为一个数若有因子它们在数轴上一定是分列在数的平方根两侧的
if(x%i==0){
return false;
}
}
return true;
}
//法二 逆向
#include<iostream>
using namespace std;
int main(){
int num;
cin>>num;
while(num--){
double m,n;
cin>>m>>n;
double cnt=n-m+1; //逆向思维法,先假设全部是素数
for(int i=m;i<=n;i++){
for(int j=2;j<i-1;j++){
if(i%j==0){ //找出所有的非素数
cnt--;
break;
}
}
}
cout<<cnt<<endl;
}
return 0;
}