#include #include #include #include #include #include #include #include #include #include using namespace std; #define ll long long const int N = 200000; int prime[N] = {0},num_prime = 0; int isNotPrime[N] = {1, 1}; int mnfac(int x,int limit1){ for(int i=0;i x){ break; } if(prime[i] >= limit1){ return limit1; } if(x % prime[i] == 0){ return prime[i]; } } return x; } int main(){ for(long i = 2 ; i < N ; i ++) { if(! isNotPrime[i]) prime[num_prime ++]=i; //关键处1 for(long j = 0 ; j < num_prime && i * prime[j] < N ; j ++) { isNotPrime[i * prime[j]] = 1; if( !(i % prime[j] ) ) //关键处2 break; } } /*for(int i=0;i<=10;i++){ cout<>t; while(t--){ int n,d; //cin>>n>>d; scanf("%d%d",&n,&d); int limit1 = (n-1)/d; int limit2 = mnfac(d,limit1); int limit = min(limit1,limit2); int ans = upper_bound(prime,prime+17900,limit)-prime; printf("%d\n",ans); } }