給定乙個正整數 \(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 ...