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

2021-09-26 06:26:53 字數 1044 閱讀 1186

時/空限制:1s / 64mb

給定乙個正整數n,求1~n中每個數的尤拉函式之和。

共一行,包含乙個整數n。

共一行,包含乙個整數,表示1~n中每個數的尤拉函式之和。

1≤n≤10^6

題意:求1~n中每個數的尤拉函式之和。

思路:在這個題目中我們不能直接分別去求1~n之間的尤拉函式,會超時,所以我們就可以根據素數篩那樣進行尤拉篩法。

要想求尤拉函式需要用到以下幾個性質(p為質數):

證明:

證明:

根據這些性質,我們就可以寫**了。

accepted code:

//埃篩

/* * @author: lzyws739307453

* @language: c++

*/#include using namespace std;

const int maxn = 1e6 + 5;

int phi[maxn];

void euler(int n)

}}int main()

//線性篩

/* * @author: lzyws739307453

* @language: c++

*/#include using namespace std;

const int maxn = 1e6 + 5;

bool vis[maxn];

int prime[maxn], phi[maxn];

void euler(int n)

for (int j = 0; j < cnt && prime[j] <= n / i; j++) }}

}int main()

篩法求尤拉函式

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

AcWing 874 篩法求尤拉函式

題目描述 給定乙個正整數n,求1 n中每個數的尤拉函式之和。輸入格式 共一行,包含乙個整數n。輸出格式 共一行,包含乙個整數,表示1 n中每個數的尤拉函式之和。資料範圍 1 n 10 6 輸入樣例 6輸出樣例 12分析 求1到n中每個數的尤拉函式之和,顯然乙個個呼叫計算尤拉函式的公式時間複雜度是極高...

AcWing 874 篩法求尤拉函式

這道題並不簡單,你要會用尤拉篩去篩尤拉數。說說思路。首先和尤拉篩質數一樣,先把質數篩出來,質數的尤拉數為本身減1,因為質數與前面的數都互質。然後用質數去更新下乙個數,篩除合數的同時,去更新合數的尤拉數,其中有幾個特殊的地方。include using namespace std const int ...