题目
给定一个正整数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
primes.append(i)
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))