程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python:歐拉函數模版

編輯:Python

#! 歐拉函數:對於一個正整數n,小於n且和n互質的正整數(包括1)的個數,記作φ(n)
n = int(input())
primes = [] # 存質數
values = [1]*(n+1) # 存歐拉函數的值
values[0] = 0 # 0的歐拉函數值為0
st = [True for i in range(n+1)] # 存每個數是否是質數
def get_eulor(n):
for i in range(2, n+1): # 對於每個大於2的自然數
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 # p*i不是質數,設置為False
# 如果i % p != 0 p不是i的質因數,則eulor(p*i) = p * eulor(i) * (p-1) / p = (p-1)* eulor(i)
values[p * i] = (p - 1) * values[i]
if i % p == 0:
# 如果i % p = 0, p是i的質因數,則eulor(p*i) = p * eulor(i)
values[p * i] = p * values[i]
break
return values
print(get_eulor(n))
#! 前五十個數的歐拉函數值
# [0, 1, 1, 2, 2, 4, 2, 6, 4, 6, 4, 10, 4, 12, 6, 8, 8,
# 16, 6, 18, 8, 12, 10, 22, 8, 20, 12, 18, 12, 28, 8, 30,
# 16, 20, 16, 24, 12, 36, 18, 24, 16, 40, 12, 42, 20, 24, 22, 46, 16, 42, 20]


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved