日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

欧拉函数最全总结(欧冠积分射手榜)

發布時間:2023/12/15 综合教程 24 生活家
生活随笔 收集整理的這篇文章主要介紹了 欧拉函数最全总结(欧冠积分射手榜) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歐拉函數的內容

  • 歐拉函數的引入
  • 歐拉函數的定義
  • 歐拉函數的基本性質
  • 歐拉函數的計算方法
  • 歐拉函數的相關定理以及證明
  • 歐拉函數的應用

一、歐拉函數的引入

首先引入互質關系:

如果兩個正整數,除了1以外,沒有其他公因子,我們就稱這兩個數是互質關系(coprime)。比如,15和32沒有公因子,所以它們是互質關系。這說明,不是質數也可以構成互質關系。

其次引進縮系得概念:

在與模數m互素的全部剩余類中,各取一數所組成的集叫做模數m的一組縮系。

在討論縮系的過程中,需要引入一個常用的數論函數–歐拉函數φ(n)。

請思考以下問題:  

  任意給定正整數n,請問在小于等于n的正整數之中,有多少個與n構成互質關系?(比如,在1到8之中,有多少個數與8構成互質關系?)

計算這個值的方法就叫做歐拉函數,以φ(n)表示。在1到8之中,與8形成互質關系的是1、3、5、7,所以 φ(n) = 4。

二、歐拉函數的定義

  1. 定義: 歐拉函數φ(n)是一個定義在正整數集上得函數,φ(n)的值等于序列0,1,2,…,n-1中與n互素的數的個數。

此函數以其首名研究者歐拉命名(Euler’s totient function),它又稱為Euler’s totient function、φ函數、歐拉商數等。

特別的,φ(1)=1(和1互質的數(小于等于1)就是1本身)。
  1. 函數表:

三、歐拉函數的性質

  1. 當p是素數時,φ§=p-1

  2. 歐拉函數是積性函數,但不是完全積性函數

    當且只當n可以分解成兩個互質的整數之積,n = p1 × p2,則φ(n) = φ(p1p2) = φ(p1)φ(p2)

    特別的,對于兩個素數p,q, φ(pq)=(p-1)(q-1)。(RSA算法應用)

  3. 當n>2時,φ(n)都是偶數,也即φ(n)≡0(mod2)

    簡單證明,因為若n是質數p的k次冪,φ(n)=pk-pk-1=(p-1)pk-1
    當p為2時,pk-1必為偶數;
    當p>2時,(p-1)必為偶數。

四、歐拉函數的計算方法

(一)素數分解法

1.對于一個正整數N的素數冪分解N=P1q1P2q2…Pnqn,其中,Pi為素數(1≤i≤n)。

根據第二條性質得到:

φ(N)=φ(P1q1P2q2…Pnqn)=φ(P1q)φ(P2q2)…φ(Pnqn)

注意:每種質因數只有一個。
若n是質數p的k次冪,φ(n)=pk-pk-1=(p-1)pk-1,因為除了p的倍數外,其他數都跟n互質。

簡單證明:φ(n)=pk-pk-1=(p-1)pk-1

證明:
由φ(n)的定義值,φ(pk)等于從pk減去在1,…,pk中與p不互素的數的個數。因為p是素數,故φ(pk)等于從pk減去在1,…,pk中被p整除的數的個數。而在
1,…,p,p+1,…,2p,…,pa-1 * p
中,易知p的倍數共有pa-1個,即得φ(n)=pk-pk-1=(p-1)pk-1
證完

(二)編程思維

利用歐拉函數和它本身不同質因數的關系,用篩法計算出某個范圍內所有數的歐拉函數值。

歐拉函數和它本身不同質因數的關系:

歐拉函數: φ(N)=N{∏p|N}(1-1/p)

亦即: φ ( N ) = N ? ∏ ( 1 ? 1 / p ) ( P 是 數 N 的 質 因 數 ) φ(N)=N* ∏(1-1/p)(P是數N的質因數) φ(N)=N?∏(1?1/p)(P是數N的質因數)
如:
φ(10)=10×(1-1/2)×(1-1/5)=4; 10的質因數為2,5;
φ(30)=30×(1-1/2)×(1-1/3)×(1-1/5)=8; 30的質因數為2,3,5;
φ(49)=49×(1-1/7)=42。 49的質因數為7。

1.求n以內的所有素數

#l[]
def prime(n):
    #global l=[] # 全局變量
    global l
    l=[]
    for x in range(n):
    #判斷如果x是素數,則打印,如果不是素數就跳過
        if x <2:
            continue
        for i in range(2,x):
            if x % i == 0:
                break
        else:
            l.append(x)
    print(l)
    
prime(100)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

2.求φ(n)

def phi(n):
    ans=n
    for i in l:
        if(n%i==0):
            ans=ans*(1-1/i)#等價于通項,把n乘進去
           
    return (int(ans))
phi(100)

#for i in range(1,10):
   # print(phi(i))
40

3.格式化輸出0-100歐拉函數表(“x?”代表十位數,“x”代表個位數)

  • 步驟一:輸出表頭和表格橫向數值
print("{:>40}".format("0~100歐拉函數表(“x?”代表十位數,“x”代表個位數)"))
print()
print ("{:>6}".format("φ(n)"),end='')
for x in range(0,10):
    print ("{:>6}".format(x),end='')

          0~100歐拉函數表(“x?”代表十位數,“x”代表個位數)

  φ(n)     0     1     2     3     4     5     6     7     8     9
  • 步驟二:輸出表格橫向和縱向數值
print("{:>40}".format("0~100歐拉函數表(“x?”代表十位數,“x”代表個位數)"))
print()
print ("{:>6}".format("φ(n)"),end='')
for x in range(0,10):
    print ("{:>6}".format(x),end='')

for x in range(0,10):
    print ("\n")
    print ("{:>6}".format(str(x)+"?"),end='')
          0~100歐拉函數表(“x?”代表十位數,“x”代表個位數)

  φ(n)     0     1     2     3     4     5     6     7     8     9

    0?

    1?

    2?

    3?

    4?

    5?

    6?

    7?

    8?

    9?
  • 步驟三: 輸出最終效果
import termcolor
#title=termcolor.colored("0~100歐拉函數表(“x?”代表十位數,“x”代表個位數)",'white','on_red',['bold'])
title=termcolor.colored("0~100歐拉函數表(“x?”代表十位數,“x”代表個位數)",color=None,on_color=None,attrs=['bold']) #加粗
print("{0:^70}".format(title))
print()
print ("{:>7}".format("φ(n)"),end='')
for x in range(0,10):
    print ("{:>7}".format(x),end='')

for x in range(0,10):
    a=x*10
    print ("\n")
    print ("{:>8}".format(str(x)+"?"),end='')
    for y in range(0+a,10+a):
        print("{0:>7}".format(phi(y)),end='')

print()
print()
#print("φ(100)=",phi(100))
print("{:>40}{:}".format("φ(100)=",phi(100)))
                0~100歐拉函數表(“x?”代表十位數,“x”代表個位數)              

   φ(n)      0      1      2      3      4      5      6      7      8      9

      0?      0      1      1      2      2      4      2      6      4      6

      1?      4     10      4     12      6      8      8     16      6     18

      2?      8     12     10     22      8     20     12     18     12     28

      3?      8     30     16     20     16     24     12     36     18     24

      4?     16     40     12     42     20     24     22     46     16     42

      5?     20     32     24     52     18     40     24     36     28     58

      6?     16     60     30     36     32     48     20     66     32     44

      7?     24     70     24     72     36     40     36     60     24     78

      8?     32     54     40     82     24     64     42     56     40     88

      9?     24     72     44     60     46     72     32     96     42     60

                                 φ(100)=40

五、歐拉函數相關定理以及證明

(一)定理1:縮系與歐拉函數的關系

模數m的一組縮系含有φ(m)個數。

(二)定理2:縮系的充要條件

若a1,…,aφ(m)是φ(m)個與m互素的整數,則a1,…,aφ(m)是模數m的一組縮系的充要條件是它們兩兩對模數m不同余。

定理1和定理2,根據縮系和歐拉函數的定義顯然成立。

(三)定理3:縮系拓展

若(a,m)=1,x通過模數m的縮系,則ax也通過模數m的縮系。

證:當x通過模數m的縮系,則ax通過φ(m)個整數,由于(a,m)=1,(x,m)=1,故(ax,m)=1。若ax1≡ax2(mod m),可得x1≡x2(mod m),與所設x通過模數m的縮系矛盾,故ax通過模數m的縮系。
證完

特別說明:根據定理:整數a,b對模數m同余的充分必要條件是m|a-b.
易得,ax1≡ax2(mod m)的充分必要條件是m|ax1-ax2=a(x1-x2),
又因為,(ax,m)=1,所有當且僅當,x1≡x2(mod m),結論成立。

1. 簡單證明:(a,m)=1,(x,m)=1,故(ax,m)=1。

①:當m=0時,a=±1,結論成立。
②:當a=0時,m=±1,且(0,m)=(0,m),結論成立。
③:當am≠0時,(a,m)=(a(x,m),m)=((ax,am),m)=(ax,m(a,1))=(ax,m),結論成立。
證完

(四)定理4:設m>1,(a,m)=1,則aφ(m)≡1(mod m).

證: 設 r1,r2,…,rφ(m)是模數m的一組縮系,則由定理3,ar1,ar2,…,arφ(m)也是模數m的一組縮系,故
(ar1)(ar2)…(arφ(m))≡r1r2…rφ(m)(mod m),

aφ(m)r1r2…rφ(m)≡r1r2…rφ(m)(mod m) ①
由于
(ri,m)=1,i=1,2,…,φ(m),

(r1r2…rφ(m),m)=1. ②
根據定理:若ac≡bc(mod m),且若(m,c)則a≡b(mod m/d). 再由②和①得
aφ(m)≡1(mod m).
證完

1. 若ac≡bc(mod m),且若(m,c)則a≡b(mod m/d).

簡單證明:
因為m|c(a-b),故m/d|c/d(a-b),又因(m/d,c/d)=1,便知m/d|(a-b).
證完

(五)定理5:若p是素數,則對于每個整數a,有ap≡a(mod p).

由定理4立刻推得定理5,它通常叫做費馬小定理。

簡單證明:
①:若a不是p的倍數,又因p為素數,則有(a,p)=1,
則由歐拉定理可得,也即定理4,aφ(m)≡1(mod m),
又根據性質1,得到φ§=p-1,所以ap-1≡1(mod p),
等式兩邊乘以a,可得ap≡a(mod p).
②:若a是p的倍數,也即不互質,a(mod p)≡ap(mod p)≡0,
可以表示為:ap≡a(mod p).
證完

(六)定理6:設m1>0,m2>0,(m1,m2)=1,x1,x2分別通過模數m1,m2的縮系,則m2x1+m1x2通過模數m1m2的縮系.

證: 首先證明(m2x1+m1x2,m1m2)=1。否則,有素數p,p|m2x1+m1x2,p|m1m2。如p|m1,則p|m2x1,而p?x1,故p|m2,此與(m1,m2)=1矛盾;如p|m2,可得出相同的矛盾。這就證明x1,x2分別通過模數m1和m2的縮系時,φ(m1)* φ(m2)個數m2x1+m1x2均與m1m2互素。

反之,凡與m1m2互素之a有

a≡m2x1+m1x2(mod m1m2),(x1,m1)=(x2,m2)=1. ③

這是因為,由定理:設m1>0,m2>0,(m1,m2)=1,而x1,x2分別通過模數m1,m2的完全剩余系,則m2x1+m1x2通過模數m1m2的完全剩余系. 知有x1和x2使a≡m2x1+m1x2(mod m1m2),所以只需證明當(a,m1m2)=1時,(x1,m1)=(x2,m2)=1。如果(x1,m1)>1,則有素數q,q|x1,q|m1。而a≡m2x1+m1x2(mod m1m2),由此推出q|a,與(a,m1m2)=1矛盾,故(x1,m1)=1。同理可證(x2,m2)=1。

最后,再由設m1>0,m2>0,(m1,m2)=1,而x1,x2分別通過模數m1,m2的完全剩余系,則m2x1+m1x2通過模數m1m2的完全剩余系. 知m2x1+m1x2中任兩個對模數m1m2不同余。
證完

由定理6,立得
推論: 若(m1,m2)=1,則φ(m1m2)=φ(m1)φ(m2).

(七)定理7:歐拉函數的一般計算方法

對于一個正整數n的素數冪分解n=P1q1P2q2…Pnqn,其中,Pi為素數(1≤i≤n),則φ(n)=n(1-1/P1)…(1-1/Pn).

證明過程參考1.4.1以及定理6的推論。

六、歐拉函數的應用

(一)應用一:證明相關題目

證明:設n≥1,則有∑φ(n)=n,其中d|n,d>0.

證:對于一個正整數n的素數冪分解n=P1q1P2q2…Pnqn,其中,Pi為素數(1≤i≤n),d|n。

d=∑∑…∑P1x1P2x2…Pnxn(0≤x1≤q1,0≤x2≤q2,…,0≤xn≤qn)

所以,∑φ(n)=∑∑…∑φ(P1x1P2x2…Pnxn)(0≤x1≤q1,0≤x2≤q2,…,0≤xn≤qn)

根據推論6可得
∑φ(n)=∑φ(P1x1) ∑φP2x2) … ∑φ(Pnxn) (0≤x1≤q1,0≤x2≤q2,…,0≤xn≤qn)

根據1.4.1展開得

=[1+(P1 -1)+(P12-P1)…(P1q1-P1q1-1)]
[1+(P2 -1)+(P22-P2)…(P2q2-P2q2-1)]

[1+(Pn -1)+(Pn2-Pn)…(Pnqn-Pnqn-1)]
=P1q1P2q2…Pnqn
=n
證完

(二)應用二:求原根個數以及全部原根

1. 原根個數

若模m有原根,則原根共有φ(φ(m))個。

2. 全部原根

特別地,若m=p為素數,則模p共有φ(p-1)個原根,并且若g為模p的一個原根,則模p的全部原根為{gk|1≤k≤φ( p ),(φ( p ), k)=1}。

(三)應用三:RSA算法

RSA算法的具體描述如下:
(1)任意選取兩個不同的大素數p和q計算乘積n=pq,φ(n)=(p-1)(q-1)

(2)任意選取一個大整數e,滿足gcd(e,φ(n))=1 ,整數e用做加密鑰(注意:e的選取是很容易的,例如,所有大于p和q的素數都可用);

(3)確定的解密鑰d,滿足 (de)modφ(n)=1,即de=kφ(n)+1,k≥1 是一個任意的整數;所以,若知道e和φ(n),則很容易計算出d;

(4)公開整數n和e,秘密保存d;

(5)將明文m(m<n是一個整數)加密成密文c,加密算法為

c=E(m)=memodn

(6)將密文c解密為明文m,解密算法為

m=D( c )=cdmodn

? 然而只根據n和e(注意:不是p和q)要計算出d是不可能的。因此,任何人都可對明文進行加密,但只有授權用戶(知道d)才可對密文解密 。

測試

(一)termcolor庫的使用

import termcolor
dir(termcolor)
['ATTRIBUTES',
 'COLORS',
 'HIGHLIGHTS',
 'RESET',
 'VERSION',
 '__ALL__',
 '__builtins__',
 '__cached__',
 '__doc__',
 '__file__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__',
 'colored',
 'cprint',
 'os',
 'print_function']
help(termcolor)
Help on module termcolor:

NAME
    termcolor - ANSII Color formatting for output in terminal.

FUNCTIONS
    colored(text, color=None, on_color=None, attrs=None)
        Colorize text.
        
        Available text colors:
            red, green, yellow, blue, magenta, cyan, white.
        
        Available text highlights:
            on_red, on_green, on_yellow, on_blue, on_magenta, on_cyan, on_white.
        
        Available attributes:
            bold, dark, underline, blink, reverse, concealed.
        
        Example:
            colored('Hello, World!', 'red', 'on_grey', ['blue', 'blink'])
            colored('Hello, World!', 'green')
    
    cprint(text, color=None, on_color=None, attrs=None, **kwargs)
        Print colorize text.
        
        It accepts arguments of print function.

DATA
    ATTRIBUTES = {'blink': 5, 'bold': 1, 'concealed': 8, 'dark': 2, 'rever...
    COLORS = {'blue': 34, 'cyan': 36, 'green': 32, 'grey': 30, 'magenta': ...
    HIGHLIGHTS = {'on_blue': 44, 'on_cyan': 46, 'on_green': 42, 'on_grey':...
    RESET = '\x1b[0m'
    VERSION = (1, 1, 0)
    __ALL__ = ['colored', 'cprint']
    print_function = _Feature((2, 6, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0)...

?
?

print(termcolor.colored("error","red"))
[31merror[0m
print(termcolor.colored("error","red",'on_red',['red', 'bold']))
---------------------------------------------------------------------------

KeyError                                  Traceback (most recent call last)

<ipython-input-125-7c06270d31d5> in <module>
----> 1 print(termcolor.colored("error","red",'on_red',['red', 'bold']))


c:\users\tianjie\test1\lib\site-packages\termcolor.py in colored(text, color, on_color, attrs)
    110         if attrs is not None:
    111             for attr in attrs:
--> 112                 text = fmt_str % (ATTRIBUTES[attr], text)
    113 
    114         text += RESET


KeyError: 'red'
from termcolor import colored, cprint

text = colored('Hello, World!', 'white','on_red',attrs=['reverse', 'bold'])
print(text)
cprint('Hello, World!', 'green', 'on_red')
[1m[7m[41m[37mHello, World![0m
[41m[32mHello, World![0m

(二)全局變量和局部變量

聲明和定義不能同時進行

a=2
#print(a)
def sum(b):
    #print(a) #會報錯
    #global a=3 #會報錯
    global a  #聲明
    a=3
    print(a)
    
print(a)

sum(5)

sum(6)
2
3
3
a=2
print(a)
def sum(b):
    #print(a) #會報錯
    #global a=3 #會報錯
    global a  #聲明
    a=3
    print(a)
    
print(a)  #調用前 
sum(5)    
print(a)  #調用后



sum(6)
2
2
3
3
3

總結

以上是生活随笔為你收集整理的欧拉函数最全总结(欧冠积分射手榜)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。