mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
137 lines
3.9 KiB
C++
137 lines
3.9 KiB
C++
|
#include<stdio.h>
|
||
|
#include<math.h>
|
||
|
#include<algorithm>
|
||
|
#include<iostream>
|
||
|
using namespace std;
|
||
|
#include<string.h>
|
||
|
#define SSS 6000
|
||
|
#define SIZE 1000000
|
||
|
#define INF 2000000000
|
||
|
#define NUM 200
|
||
|
__int64 aa[300];
|
||
|
__int64 rr[50000];
|
||
|
int pri[NUM];
|
||
|
int sub[SIZE];
|
||
|
int pdsu(__int64 n)
|
||
|
{
|
||
|
__int64 i;
|
||
|
if(n<=0||n==1 )
|
||
|
return 0;
|
||
|
if( n==2)
|
||
|
return 1;
|
||
|
else{
|
||
|
for(i=2; i*i<=n; i++)
|
||
|
if(n%i==0)
|
||
|
return 0;
|
||
|
}
|
||
|
return 1;
|
||
|
}
|
||
|
void sf(){
|
||
|
int temp,n;
|
||
|
for(int i=0;i<SIZE;i++)
|
||
|
sub[i]=1;
|
||
|
sub[0]=sub[1]=0;
|
||
|
for(int i=2;i<=sqrt(SIZE);i++){
|
||
|
if(sub[i]==1){
|
||
|
temp=2*i;
|
||
|
while(temp<=SIZE){
|
||
|
sub[temp]=0;
|
||
|
temp+=i;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
int init(){
|
||
|
int j = 0 ;
|
||
|
pri[j++] = 2 ;
|
||
|
pri[j++] = 3 ;
|
||
|
for( int i = 3 ; i<SSS ;i++ ){
|
||
|
if(sub[i]){
|
||
|
pri[j++]=i;
|
||
|
}
|
||
|
}
|
||
|
return j;
|
||
|
}
|
||
|
int main(){
|
||
|
int num;
|
||
|
int t = 0 ;
|
||
|
__int64 res , next ,next2 ;
|
||
|
int b;
|
||
|
sf();
|
||
|
num = init();
|
||
|
sf();
|
||
|
for(int a = 1 ; a< 600 ; a++ ){
|
||
|
for(int i = 0; i<NUM ;i++ ){
|
||
|
res = pri[i] ;
|
||
|
b = pri[i] - a;
|
||
|
if(b == 0 ) continue;
|
||
|
next = a * pri[i] + b ;
|
||
|
if(next == pri[i]) continue;
|
||
|
if(res * next > INF){
|
||
|
continue;
|
||
|
}
|
||
|
if(next <0 )
|
||
|
continue;
|
||
|
if(next >= SIZE){
|
||
|
if(!pdsu(next))
|
||
|
continue ;
|
||
|
}
|
||
|
else{
|
||
|
if(!sub[next])
|
||
|
continue ;
|
||
|
}
|
||
|
res = res * next;
|
||
|
if(res >INF) continue;
|
||
|
while(1){
|
||
|
next2 = next * a +b;
|
||
|
if(next2 == next ) break;
|
||
|
if(res * next2 > INF){
|
||
|
break;
|
||
|
}
|
||
|
if(next2 <0 )
|
||
|
break;
|
||
|
if(next2 >= SIZE){
|
||
|
if(!pdsu(next2))
|
||
|
break ;
|
||
|
}
|
||
|
else{
|
||
|
if(!sub[next2])
|
||
|
break ;
|
||
|
}
|
||
|
res = res * next2;
|
||
|
if(res >INF) break;
|
||
|
rr[t++] = res ;
|
||
|
next = next2 ;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
for(int i = 0 ; i<t ;i++ )
|
||
|
for(int j = i+1 ; j <t ;j++)
|
||
|
{
|
||
|
if(rr[i]>rr[j]){
|
||
|
int temp = rr[i];
|
||
|
rr[i] = rr[j];
|
||
|
rr[j] = temp;
|
||
|
}
|
||
|
}
|
||
|
int ccc = 0;
|
||
|
for(int i = 0 ; i <t ; i++)
|
||
|
{
|
||
|
if(rr[i]!= rr[i+1])
|
||
|
aa[ccc++]=rr[i];
|
||
|
}
|
||
|
int N;
|
||
|
__int64 zuo ,you ;
|
||
|
scanf("%d",&N);
|
||
|
while(N--){
|
||
|
scanf("%I64d%I64d",&zuo,&you);
|
||
|
int ans = 0 ;
|
||
|
for(int i = 0 ; i <243 ;i++){
|
||
|
if(zuo<=aa[i] && you>=aa[i])
|
||
|
ans++;
|
||
|
}
|
||
|
printf("%d\n",ans);
|
||
|
}
|
||
|
return 0 ;
|
||
|
}
|