题目背景
题目名称是吸引你点进来的
实际上该题还是很水的
题目描述
区间质数个数
输入输出格式
输入格式:一行两个整数 询问次数n,范围m
接下来n行,每行两个整数 l,r 表示区间
输出格式:对于每次询问输出个数 t,如l或r∉[1,m]输出 Crossing the line
输入输出样例
说明
【数据范围和约定】
对于20%的数据 1<=n<=10 1<=m<=10
对于100%的数据 1<=n<=1000 1<=m<=1000000 -10^9<=l<=r<=10^9 1<=t<=1000000
#include<bits/stdc++.h> using namespace std; const int MAXN = 1e6 + 10; int a[MAXN], book[MAXN] , b[MAXN]; int su(int n) { if(n == 1) return 0; if(n == 2) return 1; for(int i = 2 ; i <= sqrt(n); i ++) if(n % i == 0) return 0; return 1; } int main() { int n , m ; cin >> n >> m; for(int i = 1; i <= 1e6 ; i ++ ) { if(book[i] == -1) continue; if(su(i)) { book[i] = 1; for(int j = i + i ; j <= 1e6 ; j += i) book[j] = -1; } } //for(int i = 1; i <= 10 ; i ++ ) // cout << book[i] << " "; //cout << endl; int num = 0; for(int i = 1; i <= 1e6 ; i ++) { if(book[i] == 1) num ++; b[i] = num; } //for(int i = 1; i <= 10 ; i ++ ) // cout << b[i] << " "; //cout << endl; for(int i = 1; i <= n ; i ++) { int x, y; cin >> x >> y; if( x > m || y > m || x <= 0 || y <= 0) cout << "Crossing the line" << endl; else { cout << b[y] - b[x - 1] << endl; } } return 0; }