篩法計算尤拉函式

2021-07-25 03:41:42 字數 825 閱讀 8919

先給出算單個尤拉函式的鏈結。

大致方法其實和篩質數是類似的,其實,考慮到尤拉函式的定義,它和質數其實是關係甚緊的。

需要用到如下性質(p為質數):

1. phi(p)=p-1   因為質數p除了1以外的因數只有p,故1至p的整數只有p與p不互質

2. 如果i mod p = 0, 那麼phi(i * p)=p * phi(i) ;若整數n與i互質,n+i與i依然互質

3.若i mod p ≠0, 那麼phi(i * p)=phi(i) * (p-1);

i mod p 不為0且p為質數, 所以i與p互質, 那麼根據尤拉函式的積性phi(i * p)=phi(i) * phi(p) 其中phi(p)=p-1即第一條性質

#include 

#include

#include

#include

#include

#include

using

namespace

std ;

const

int maxn = 5000010 ;

bool is_prime[maxn] ;

int phi[maxn], n, m ;

vector

prime ;

void euler_phi ()

for ( j = 0 ; j < prime.size() ; j ++ )

else phi[i*prime[j]] = phi[i]*(prime[j]-1) ;}}

}int main()

AcWing 篩法求尤拉函式 篩法 尤拉函式

時 空限制 1s 64mb 給定乙個正整數n,求1 n中每個數的尤拉函式之和。共一行,包含乙個整數n。共一行,包含乙個整數,表示1 n中每個數的尤拉函式之和。1 n 10 6 題意 求1 n中每個數的尤拉函式之和。思路 在這個題目中我們不能直接分別去求1 n之間的尤拉函式,會超時,所以我們就可以根據...

篩法尤拉函式

尤拉函式 因為對於n來說,小於等於n的正整數有n個,但是因為n是素數,n與其本身並不互質,所以有n 1個數跟它互質。若n為質數p的k次方 那麼 n p 1 pk n pk p是質數 所以乙個數要想跟n互質的話應該不是p的倍數,p的倍數有p p,2 p,3 p pn 1 p,共有pn 1個,小於等於n...

篩法求尤拉函式

題目鏈結 題意 給定乙個正整數n,求1 n中每個數的尤拉函式之和。輸入格式 共一行,包含乙個整數n。輸出格式 共一行,包含乙個整數,表示1 n中每個數的尤拉函式之和。資料範圍 1 n 1e6 輸入樣例 6輸出樣例 12思路 如果直接用尤拉函式每次求一遍質因數的話就是o n sqrt n 的時間複雜度...