874 篩法求尤拉函式

2022-09-19 14:12:15 字數 1819 閱讀 5723

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

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

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

資料範圍

\(1≤n≤10^6\)

輸入樣例:

6
輸出樣例:
12
eratosthenes篩法求尤拉函式

// problem: 篩法求尤拉函式

// contest: acwing

// url:

// memory limit: 64 mb

// time limit: 1000 ms

// %%%skyqwq

#include #define pb push_back

#define fi first

#define se second

#define mp make_pair

using namespace std;

typedef long long ll;

typedef pairpii;

template bool chkmax(t &x, t y)

template bool chkmin(t &x, t y)

template void inline read(t &x)

while (s <= '9' && s >= '0') x = x * 10 + (s ^ 48), s = getchar();

x *= f;

}int n,phi[1000005];

void euler(int n)

}int main()

線性篩法求尤拉函式

用到的性質:

1.若 \(p|n\) 且 \(p^2|n\),則 \(ϕ(n)=ϕ(n/p)*p\)

2.若 \(p|n\) 但 \(p^2\nmid n\),則 \(ϕ(n)=ϕ(n/p)*(p-1)\)

// problem: 篩法求尤拉函式

// contest: acwing

// url:

// memory limit: 64 mb

// time limit: 1000 ms

// %%%skyqwq

#include #define pb push_back

#define fi first

#define se second

#define mp make_pair

using namespace std;

typedef long long ll;

typedef pairpii;

template bool chkmax(t &x, t y)

template bool chkmin(t &x, t y)

template void inline read(t &x)

while (s <= '9' && s >= '0') x = x * 10 + (s ^ 48), s = getchar();

x *= f;

}const int n=1e6+5;

int n,prime[n],v[n],m,phi[n];

void euler(int n)

for(int j=1;j<=m;j++)

}}int main()

874 篩法求尤拉函式

給定乙個正整數n,求1 n中每個數的尤拉函式之和。輸入格式 共一行,包含乙個整數n。輸出格式 共一行,包含乙個整數,表示1 n中每個數的尤拉函式之和。資料範圍 1 n 106 輸入樣例 6輸出樣例 12想法 涉及到在範圍內的質數,則使用線性篩法 include using namespace std...

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 ...