【數論線性篩】洛谷P1865 A%B problem
阿新 • • 發佈:2017-05-13
continue 個數 區間 str 輸出 數據 兩個 裸題 n)
題目背景
題目名稱是吸引你點進來的
實際上該題還是很水的
題目描述
區間質數個數
輸入輸出格式
輸入格式:
一行兩個整數 詢問次數n,範圍m
接下來n行,每行兩個整數 l,r 表示區間
輸出格式:
對於每次詢問輸出個數 t,如l或r?[1,m]輸出 Crossing the line
輸入輸出樣例
輸入樣例#1:2 5 1 3 2 6輸出樣例#1:
2 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
題解
很簡單的線性篩裸題
就是要註意l必須大於0,r必須小於等於m
還有要用sum優化
代碼如下:
#include<cstdio> #include<iostream> using namespace std; int n,m,l,r,sum[10000004]; bool a[10050000]; int main() { scanf("%d%d",&m,&n); a[1]=1; for(int i=2;i*i<=n;++i) { if(a[i])continue; for(int j=i;i*j<=n;++j) a[i*j]=1; } for(int i=1;i<=n;++i) sum[i]=sum[i-1]+1-a[i]; for(int i=1;i<=m;++i) { scanf("%d%d",&l,&r); if(l<=0||r>n){ printf("Crossing the line\n"); continue; } printf("%d\n",sum[r]-sum[l-1]); } }
【數論線性篩】洛谷P1865 A%B problem