hdu 2824 線性篩素數求尤拉函式 字首和

2021-06-28 08:17:14 字數 483 閱讀 5419

因為只是區間查詢,沒有修改,所以只需要提前求出字首和即可,本題難點在於資料量大導致陣列用起來比較緊張,所以要重複使用頂用過的陣列

#include #include #include #include #define max 3000001

using namespace std;

int p[1000000],pt;

long long phi[max];

bool m[max];

int n = 3000001;

void init ()

{ memset ( m , 0 , sizeof ( m ) );

pt = 0;

phi[1] = 1;

int k;

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

{if (!m[i]) p[pt++]=i,phi[i]=i-1,m[i]=1;

for ( int j=0;j

線性篩素數(尤拉篩)

尤拉篩是o n 複雜度的篩素數演算法,1秒內埃篩能處理1e6的資料,而1e7的資料就必須用尤拉篩了。埃篩的基本思想是 素數的倍數一定是合數。尤拉篩基本思想是 任何數與素數的乘積一定是合數 演算法概述 遍歷 2,n 的所有數i,內層迴圈遍歷已經找到的素數prime j 將i prime j 標記為合數...

hdu2824 尤拉函式入門題及尤拉函式性質總結

尤拉函式 o sqrt n int euler int n if n 1 ans ans n n 1 return ans 尤拉函式打表法 void euler 問題描述 尤拉函式phi是數論中的一種重要函式,n 表示小於n且與n互質的數量,並且該函式具有許多優美特徵。這裡有乙個非常簡單的問題 假設...

素數線性篩法(尤拉篩)

之前寫的埃式篩法複雜度達o n log n lo gn o n logn logn o n lo gn l ogn 在大數字的時候可能複雜度還不夠理想。這種做法對於乙個合數有可能會篩了多次,導致重複做功。引入尤拉篩法能夠解決這種多次篩同乙個數字的情況,理論演算法複雜度o n o n o n 精髓在於...