篩法求尤拉函式

2021-10-02 17:59:45 字數 1036 閱讀 9270

題目鏈結

題意:給定乙個正整數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...