演算法題 篩法求尤拉函式(Python)

2021-10-12 05:44:05 字數 855 閱讀 4336

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

輸入格式

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

輸出格式

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

資料範圍

1≤n≤106

輸入樣例:

6
輸出樣例:

12
n = int(input())

primes =

values = [1]*(n+1)

st = [true]*(n+1)

def get_eulor(n):

for i in range(2, n+1):

if st[i]: # 如果是質數,加入質數列表,質數的尤拉函式值為i-1

values[i] = i - 1

for p in primes:

if p > n / i: break

st[p * i] = false

# 如果i % p != 0 p不是i的質因數,則eulor(p*i) = p * eulor(i) * (p-1) / p = (p-1)* eulor

values[p * i] = (p - 1) * values[i]

if i % p == 0:

# 如果i % p = 0, pi是i的質因數,則eulor(p*i) = p * eulor(i)

values[p * i] = p * values[i]

break

return sum(values[1:n+1])

print(get_eulor(n))

AcWing 篩法求尤拉函式 篩法 尤拉函式

時 空限制 1s 64mb 給定乙個正整數n,求1 n中每個數的尤拉函式之和。共一行,包含乙個整數n。共一行,包含乙個整數,表示1 n中每個數的尤拉函式之和。1 n 10 6 題意 求1 n中每個數的尤拉函式之和。思路 在這個題目中我們不能直接分別去求1 n之間的尤拉函式,會超時,所以我們就可以根據...

篩法求尤拉函式

題目鏈結 題意 給定乙個正整數n,求1 n中每個數的尤拉函式之和。輸入格式 共一行,包含乙個整數n。輸出格式 共一行,包含乙個整數,表示1 n中每個數的尤拉函式之和。資料範圍 1 n 1e6 輸入樣例 6輸出樣例 12思路 如果直接用尤拉函式每次求一遍質因數的話就是o n sqrt n 的時間複雜度...

874 篩法求尤拉函式

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