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