洛谷 p1865 區間質數個數

2021-08-14 01:45:53 字數 1631 閱讀 7908

方法一 線性篩 字首和

方法二 尤拉篩 線段樹

叫做a % b promblem其實是為了吸引我們點進來..

區間質數個數
輸入格式

一行兩個整數 詢問次數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

當然也可以尤拉篩,比線性篩快多啦!

ac**:

#include

#include

#include

using

namespace

std;

int n,m,l,r;

int f[1000005];//字首和陣列

bool prime[1000005];//true is prime,false is not.

void init()

}f[0]=f[1]=0;//字首和

f[2]=1,f[3]=2;

for(int i=4;i<=m;i++)

f[i]=prime[i]?f[i-1]+1:f[i-1];

//三目運算子,相當於

//int main()

printf("%d\n",f[r]-f[l-1]);//字首和其實沒啥好說的..

}}

當然也可以線性篩,不過比尤拉篩慢多啦!

ac**:

#include

#include

#include

using

namespace

std;

const

int n=1000000+5;

int prime[n],cnt=0,n,m,ans;

bool isprime[n];

struct segtreest[n<<2];

void oula()

}}void build(int o,int l,int r)

int lch=(o<<1),rch=(o<<1|1),m=(l+r)>>1;

build(lch,l,m);

build(rch,m+1,r);

st[o].sum=st[lch].sum+st[rch].sum;

}int query(int o,int l,int r)

int main()

printf("%d\n",query(1,l,r));

}return

0;}

luogu P1865 區間質數個數

區間質數個數 一行兩個整數 詢問次數n,範圍m 接下來n行,每行兩個整數 l,r 表示區間 對於每次詢問輸出個數 t,如l或r 1,m 輸出 crossing the line 2 51 3 2 62 crossing the line 資料範圍和約定 對於20 的資料 1 n 10 1 m 10 ...

洛谷 P1712 區間

在數軸上有 n個閉區間 l1,r1 l2,r2 ln,rn 現在要從中選出 m 個區間,使得這 m個區間共同包含至少乙個位置。換句話說,就是使得存在乙個 x,使得對於每乙個被選中的區間 li,ri 都有 li x ri。對於乙個合法的選取方案,它的花費為被選中的最長區間長度減去被選中的最短區間長度。...

洛谷p1603 區間dp

區間dp 在區間上進行動態規劃,求解一段區間上的最優解。主要是通過合併小區間的 最優解進而得出整個大區間上最優解的dp演算法。核心思路 思路 求解在乙個區間上的最優解,那麼把這個區間分割成乙個個小區間,求解每個小區間的最優解,再合併小區間得到大區間即可。所以可以列舉區間長度len 為每次分割成的小區...