方法一 線性篩 字首和
方法二 尤拉篩 線段樹
叫做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 為每次分割成的小區...