hdu3572線性尤拉篩

2022-03-15 23:58:24 字數 933 閱讀 4322

用線性篩來篩,複雜度o(n)

#include#include

#define fi first

#define se second

#define mp make_pair

#define pb push_back

#define pii pair#define c 0.5772156649

#define pi acos(-1.0)

#define ll long long

#define mod 1000000007

#define ls l,m,rt<<1

#define rs m+1,r,rt<<1|1

using

namespace

std;

using

namespace

__gnu_cxx;

const

double g=10.0,eps=1e-7

;const

int n=3000000+10,maxn=100000+10,inf=0x3f3f3f

;bool

isprime[n];

intprime[n],cnt,phi[n];

void

getprime()

for(int j=1;j<=cnt&&i*prime[j])

phi[i*prime[j]]=phi[i]*phi[prime[j]];}}

}int

main()

return0;

}/*******************

*******************

*/

view code

類似於素數篩,利用尤拉函式是積性函式f(a*b)=f(a)*f(b)性質

素數i的尤拉函式值為i-1,如果是合數,那麼利用最小的因子來篩它

線性篩(尤拉篩)

昨天的考試跪的一塌糊塗 第一題水過,第二題帶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 ...

尤拉篩(線性篩)

尤拉篩多用於篩素數,時間複雜度是o n 主要原理 合數 最小質因子 合數 質數 這個合數的組成是唯一的,尤拉篩裡面只在這種情況篩一次,也就是每個數就篩一次,可以完成o n 的複雜度。每當列舉到乙個數,把這個數當作後面的那個數,在已經得到的質數里列舉當作最小質因子,看看這樣的組合能找到哪個合數,但是要...