題意:有乙個長度為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 ...