08 17模擬賽 質數

2021-08-24 23:44:28 字數 1058 閱讀 2856

問題描述

小 x 是一位熱愛數學的男孩子, 在茫茫的數字中, 他對質數更有一種獨特

的情感。 小 x 認為, 質數是一切自然數起源的地方。

在小 x 的認知裡, 質數是除了本身和 1 以外, 沒有其他因數的數字。

但由於小 x 對質數的熱愛超乎尋常, 所以小 x 同樣喜歡那些雖然不是質

數, 但卻是由兩個質數相乘得來的數。

於是, 我們定義, 乙個數是小 x 喜歡的數, 當且僅當其是乙個質數, 或是

兩個質數的乘積。

而現在, 小 x 想要知道, 在 l 到 r 之間, 有多少數是他喜歡的數呢?

輸入格式

第一行輸入乙個正整數 q, 表示詢問的組數。

接下來 q 行。 包含兩個正整數 l 和 r。 保證 l≤r。

輸出格式

輸出 q 行, 每行乙個整數, 表示小 x 喜歡的數的個數。

樣例輸入

1 6樣例輸出

思路:

首先n的範圍是10^7,q的範圍是10^5次方,所以肯定要o(n+q)以內的演算法。

那麼求質數可以用線性篩或者尤拉篩(我學oi這麼多年了竟然不知道。。。)

兩個質數的乘積(其實就是偽質數)也可以在尤拉篩裡面處理。通俗點講,就是尤拉篩裡面排除乙個數的倍數,把它定為合數時,乙個數所乘的數都是質數。如果那乙個被乘的數也是質數,那麼兩數的乘積顯然就是偽質數。

**如下:

#include#include#include#includeusing namespace std;

int sum[10000005],prime[10000005],check[10000005],bprime[10000005],p=0;

struct node

a[200005];

int work(int x) }}

int main()

work(max);

for(int i=1;i<=max;i++)

for(int i=1;i<=n;i++)

return 0;

}

考試反思 0817NOIP模擬測試24 沖淡

一切都還好嗎?是啊,還好。前兩名仍然被外校包攬160 150 b哥140撐住場面,120 110 100不等。我90分混吃等死排了個大並列第10。考前說要考凸包,開啟了幾個部落格慢慢看一直到考試開始。然而我看的那個凸包是計算幾何裡的凸包,給了我很多誤導。開t1,像是個幾何,思路被卡在凸包上沒怎麼想就...

小X的質數 NOIP模擬賽 魔改線性篩素數

題意 求 l r 範圍內是質數或兩個質數乘積的數的個數 魔改線性篩素數即可,預處理1 nmax的所有符合要求的數的數量,對於每組詢問 o 1 回答。對於每個素數,肯定是要計算的。在後面排除合數的時候,判斷當前數是不是素數,若是,也算入其中。用字首和優化,對於一組詢問 l,r 回答 cnt r cnt...

《省賽模擬賽補》

c題 比賽的時候已經想到了統計最底層的每個序列的出現次數,但是一開始想的是建圖之後dfs處理,但是發現很難處理出來。其實正確的思路是拓撲排序去處理次數。我們在最後建圖完成之後,倒著從n回去拓撲即可。但是這裡有個坑點,就是一開始統計入度可能是不正確的。例如 3 1 2 4 1 2 3是1,2的父節點,...