題目鏈結
題意:給定乙個正整數n,求1~n中每個數的尤拉函式之和。
輸入格式
共一行,包含乙個整數n。
輸出格式
共一行,包含乙個整數,表示1~n中每個數的尤拉函式之和。
資料範圍
1≤n≤1e6
輸入樣例:
6輸出樣例:
12思路:如果直接用尤拉函式每次求一遍質因數的話就是o(n*sqrt(n))的時間複雜度,但是我們也可以用埃氏塞法的線性模板來寫,就可以實現o(n)。
**實現:
#include
using
namespace std;
typedef
long
long ll;
const
int n =
1000010
;int primes[n]
, cnt;
int euler[n]
;bool st[n]
;void
get_eulers
(int n)
for(
int j =
0; primes[j]
<= n / i; j ++
)//如果pj不是i的質因子,那麼pj就是i*pj的最小質因子
//那麼i*pj的質因子只比i的多乙個pj
//所有euler[i*pj] = pj*i*(1 - 1/p1)*……*(1 - 1/pk)*(1 - 1/pj)
// = euler[i] * pj * (1 - 1/pj)
euler[t]
= euler[i]
*(primes[j]-1
);}}
}int
main()
AcWing 篩法求尤拉函式 篩法 尤拉函式
時 空限制 1s 64mb 給定乙個正整數n,求1 n中每個數的尤拉函式之和。共一行,包含乙個整數n。共一行,包含乙個整數,表示1 n中每個數的尤拉函式之和。1 n 10 6 題意 求1 n中每個數的尤拉函式之和。思路 在這個題目中我們不能直接分別去求1 n之間的尤拉函式,會超時,所以我們就可以根據...
874 篩法求尤拉函式
給定乙個正整數n,求1 n中每個數的尤拉函式之和。輸入格式 共一行,包含乙個整數n。輸出格式 共一行,包含乙個整數,表示1 n中每個數的尤拉函式之和。資料範圍 1 n 106 輸入樣例 6輸出樣例 12想法 涉及到在範圍內的質數,則使用線性篩法 include using namespace std...
874 篩法求尤拉函式
給定乙個正整數 n 求 1 n 中每個數的尤拉函式之和。共一行,包含乙個整數 n 共一行,包含乙個整數,表示 1 n 中每個數的尤拉函式之和。資料範圍 1 n 10 6 輸入樣例 6輸出樣例 12eratosthenes篩法求尤拉函式 problem 篩法求尤拉函式 contest acwing u...