時/空限制: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 ...