區間質數查詢 luoguP1865

2022-05-10 05:42:11 字數 995 閱讀 6424

原題 

本來get到了乙個很好的判斷素數的方法

o(玄學常數) (我的luogu部落格 嘻嘻)

#include#include

#include

#include

using

namespace

std;

intn,m;

bool su(int

a)

return1;

}int

main()

return0;

}

然而這個方法在一些時候是有弊病的。比如本題區間質數查詢時,有些數需要重複的判斷多次。用這個方法就會t掉部分點。

一位@enderturtle大佬給出了另一種方法。

所以說,對於不同的方法,還要注意看它們的優點,適宜什麼情況啊(嘆氣

#include#include

#include

using

namespace

std;

intn,m;

int tot[1000005

];bool book[1000005

];void prime(int

f) }

else tot[i]=tot[i-1

]; }

}int

main()

else

printf(

"%d\n

",tot[r]-tot[l]);}}

return0;

}

所以我們換個角度從判斷素數,變成判斷合數;

合數顯然是可以分解質因數的,既然如此,也就說明,質數的倍數(倍數》1)都是合數,所以就有了線性篩(不懂線性篩的同學可以看洛谷[【模板】線性篩素數]( "【模板】線性篩素數"))

區間和可以用字首和處理;

f[r]-f[l],如果l是質數還要加1

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 ...

洛谷 p1865 區間質數個數

方法一 線性篩 字首和 方法二 尤拉篩 線段樹 叫做a b promblem其實是為了吸引我們點進來.區間質數個數輸入格式 一行兩個整數 詢問次數n,範圍m 接下來n行,每行兩個整數 l,r 表示區間 輸出格式 對於每次詢問輸出個數 t,如l或r 1,m 輸出 crossing the line 輸...

Luogu P4514(樹狀陣列區間查詢區間修改)

第一分鐘,x說,要有矩陣,於是便有了乙個裡面寫滿了 00 的 n mn m 矩陣。第二分鐘,l說,要能修改,於是便有了將左上角為 a,b a,b 右下角為 c,d c,d 的乙個矩形區域內的全部數字加上乙個值的操作。第三分鐘,k說,要能查詢,於是便有了求給定矩形區域內的全部數字和的操作。第四分鐘,彩...