1. 程式人生 > >【數論線性篩】洛谷P1865 A%B problem

【數論線性篩】洛谷P1865 A%B problem

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