思維 排序 線性篩

2021-09-24 22:51:57 字數 909 閱讀 1917

題意:有乙個長度為n的序列a,ai未知,已知長度為2*n的序列b。序列a經過下列操作後變成序列b。

(1)先令序列a和b相等。

(2)若ai是素數,則將第ai個素數新增到序列b中。例如ai=2,則將第2個素數3新增到序列b中。

(3)若ai不是素數,則將ai的最大約數新增到序列b中。

輸出任意一種序列a,資料保證有解。n <= 2e5,bi <= 2750131。

題解:首先想到bi的最大約數 < bi < 第bi個素數。則將序列b從小到大排序。然後從後向前遍歷序列bi。若bi是素數,則將bi和k從序列b中刪除(第k個素數是bi)。若bi不是素數,則將bi和bi的最大約數從序列b中刪除。

線性篩可以得到第i個素數,也能得到最大約數(通過與最小約數相除得到,**中有體現)。

ac**:

#include#define n 400005

#define m 3000005

typedef long long ll ;

using namespace std ;

int n ;

int a[n] ;

int num[m] ;

int max1 = 0 ;

bool vis[m] ;

int prime[m] , tot ;

int fprime[m] ;

int maxfrime[m] ;

void init()

else

}}}

線性篩 區間篩

求l到r之間的素數1 l 231 1 1 leq l 1 l231 1由於範圍過大只需要求得r 2 sqrt 2 2r 線性篩素數時間複雜度o n int n,m int prime 100000 vis 100005 void primes int n for int j 1 j m j 區間篩素...

線性篩(尤拉篩)

昨天的考試跪的一塌糊塗 第一題水過,第二題帶wa的樸素,最後題忘了特判左端點全跪,分數比起預計得分整整打了個對折啊!步入正題 線性篩 尤拉篩 一般的篩法 ppt裡叫埃拉託斯特尼篩法,名字異常高貴 的效率是o nlglgn 其實很接近o n 啊!對於一些例如n 10000000的殘暴資料會跪,於是,線...

尤拉篩 線性篩

實現 include using namespace std const int max n 1e8 int prime max n cnt bool st max n 使用bool陣列節省空間 void is prime int n intmain 每個合數只被自己最小的質因子篩去。現在證明在i ...