欧拉函数最全总结

欧拉函数的内容

  • 欧拉函数的引入
  • 欧拉函数的定义
  • 欧拉函数的基本性质
  • 欧拉函数的计算方法
  • 欧拉函数的相关定理以及证明
  • 欧拉函数的应用

一、欧拉函数的引入

首先引入互质关系:

如果两个正整数,除了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(11/p)PN
如:
φ(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
  • 39
    点赞
  • 246
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
目录 目录 1 Graph 图论 3 | DAG 的深度优先搜索标记 3 | 无向图找桥 3 | 无向图连通度(割) 3 | 最大团问题 DP + DFS 3 | 欧拉路径 O(E) 3 | DIJKSTRA 数组实现 O(N^2) 3 | DIJKSTRA O(E * LOG E) 4 | BELLMANFORD 单源最短路 O(VE) 4 | SPFA(SHORTEST PATH FASTER ALGORITHM) 4 | 第 K 短路(DIJKSTRA) 5 | 第 K 短路(A*) 5 | PRIM 求 MST 6 | 次小生成树 O(V^2) 6 | 最小生成森林问题(K 颗树)O(MLOGM). 6 | 有向图最小树形图 6 | MINIMAL STEINER TREE 6 | TARJAN 强连通分量 7 | 弦图判断 7 | 弦图的 PERFECT ELIMINATION 点排列 7 | 稳定婚姻问题 O(N^2) 7 | 拓扑排序 8 | 无向图连通分支(DFS/BFS 邻接阵) 8 | 有向图强连通分支(DFS/BFS 邻接阵)O(N^2) 8 | 有向图最小点基(邻接阵)O(N^2) 9 | FLOYD 求最小环 9 | 2-SAT 问题 9 Network 网络流 11 | 二分图匹配(匈牙利算法 DFS 实现) 11 | 二分图匹配(匈牙利算法 BFS 实现) 11 | 二分图匹配(HOPCROFT-CARP 的算法) 11 | 二分图最佳匹配(KUHN MUNKRAS 算法 O(M*M*N)) 11 | 无向图最小割 O(N^3) 12 | 有上下界的最小(最大)流 12 | DINIC 最大流 O(V^2 * E) 12 | HLPP 最大流 O(V^3) 13 | 最小费用流 O(V * E * F) 13 | 最小费用流 O(V^2 * F) 14 | 最佳边割集 15 | 最佳点割集 15 | 最小边割集 15 | 最小点割集(点连通度) 16 | 最小路径覆盖 O(N^3) 16 | 最小点集覆盖 16 Structure 数据结构 17 | 求某天是星期几 17 | 左偏树 合并复杂度 O(LOG N) 17 | 树状数组 17 | 二维树状数组 17 | TRIE 树(K 叉) 17 | TRIE 树(左儿子又兄弟) 18 | 后缀数组 O(N * LOG N) 18 | 后缀数组 O(N) 18 | RMQ 离线算法 O(N*LOGN)+O(1) 19 | RMQ(RANGE MINIMUM/MAXIMUM QUERY)-ST 算法 (O(NLOGN + Q)) 19 | RMQ 离线算法 O(N*LOGN)+O(1)求解 LCA 19 | LCA 离线算法 O(E)+O(1) 20 | 带权值的并查集 20 | 快速排序 20 | 2 台机器工作调度 20 | 比较高效的大数 20 | 普通的大数运算 21 | 最长公共递增子序列 O(N^2) 22 | 0-1 分数规划 22 | 最长有序子序列(递增/递减/非递增/非递减) 22 | 最长公共子序列 23 | 最少找硬币问题(贪心策略-深搜实现) 23 | 棋盘分割 23 | 汉诺塔 23 | STL 中的 PRIORITY_QUEUE 24 | 堆栈 24 | 区间最大频率 24 | 取第 K 个元素 25 | 归并排序求逆序数 25 | 逆序数推排列数 25 | 二分查找 25 | 二分查找(大于等于 V 的第一个值) 25 | 所有数位相加 25 Number 数论 26 1 |递推求欧拉函数 PHI(I) 26 |单独求欧拉函数 PHI(X) 26 | GCD 最大公约数 26 | 快速 GCD 26 | 扩展 GCD 26 | 模线性方程 A * X = B (% N) 26 | 模线性方程组 26 | 筛素数 [1..N] 26 | 高效求小范围素数 [1..N] 26 | 随机素数测试(伪素数原理) 26 | 组合数学相关 26 | POLYA 计数 27 | 组合数 C(N, R) 27 | 最大 1 矩阵 27 | 约瑟夫环问题(数学方法) 27 | 约瑟夫环问题(数组模拟) 27 | 取石子游戏 1 27 | 集合划分问题 27 | 大数平方根(字符串数组表示) 28 | 大数取模的二进制方法 28 | 线性方程组 A[][]X[]=B[] 28 | 追赶法解周期性方程 28 | 阶乘最后非零位,复杂度 O(NLOGN) 29 递归方法求解排列组合问题 30 | 类循环排列 30 | 全排列 30 | 不重复排列 30 | 全组合 31 | 不重复组合 31 | 应用 31 模式串匹配问题总结 32 | 字符串 HASH 32 | KMP 匹配算法 O(M+N) 32 | KARP-RABIN 字符串匹配 32 | 基于 KARP-RABIN 的字符块匹配 32 | 函数名: STRSTR 32 | BM 算法的改进的算法 SUNDAY ALGORITHM 32 | 最短公共祖先(两个长字符串) 33 | 最短公共祖先(多个短字符串) 33 Geometry 计算几何 34 | GRAHAM 求凸包 O(N * LOGN) 34 | 判断线段相交 34 | 求多边形重心 34 | 三角形几个重要的点 34 | 平面最近点对 O(N * LOGN) 34 | LIUCTIC 的计算几何库 35 | 求平面上两点之间的距离 35 | (P1-P0)*(P2-P0)的叉积 35 | 确定两条线段是否相交 35 | 判断点 P 是否在线段 L 上 35 | 判断两个点是否相等 35 | 线段相交判断函数 35 | 判断点 Q 是否在多边形内 35 | 计算多边形的面积 35 | 解二次方程 AX^2+BX+C=0 36 | 计算直线的一般式 AX+BY+C=0 36 | 点到直线距离 36 | 直线与圆的交点,已知直线与圆相交 36 | 点是否在射线的正向 36 | 射线与圆的第一个交点 36 | 求点 P1 关于直线 LN 的对称点 P2 36 | 两直线夹角(弧度) 36 ACM/ICPC 竞赛之 STL 37 ACM/ICPC 竞赛之 STL 简介 37 ACM/ICPC 竞赛之 STL--PAIR 37 ACM/ICPC 竞赛之 STL--VECTOR 37 ACM/ICPC 竞赛之 STL--ITERATOR 简介 38 ACM/ICPC 竞赛之 STL--STRING 38 ACM/ICPC 竞赛之 STL--STACK/QUEUE 38 ACM/ICPC 竞赛之 STL--MAP 40 ACM/ICPC 竞赛之 STL--ALGORITHM 40 STL IN ACM 41 头文件 42 线段树 43 求矩形并的面积(线段树+离散化+扫描线) 43 求矩形并的周长(线段树+离散化+扫描线) 44
几何\ 多边形 多边形切割 浮点函数 几何公式 面积 球面 三角形 三维几何 凸包(graham) 网格(pick) 圆 整数函数 注意 结构\ 并查集 并查集扩展(friend_enemy) 堆(binary) 堆(mapped) 矩形切割 线段树 线段树扩展 线段树应用 子段和 子阵和 其他\ 大数(整数类封装) 分数 矩阵 线性方程组(gauss) 日期 线性相关 数论\ 阶乘最后非零位 模线性方程(组) 质数表 质数随机判定(miller_rabin) 质因数分解 最大公约数欧拉函数 数值计算\ 定积分计算(Romberg) 多项式求根(牛顿法) 周期性方程(追赶法) 图论_NP搜索\ 最大团(n小于64) 最大团 图论_连通性\ 无向图关键边(dfs邻接阵形式) 无向图关键点(dfs邻接阵形式) 无向图块(bfs邻接阵形式) 无向图连通分支(bfs邻接阵形式) 无向图连通分支(dfs邻接阵形式) 有向图强连通分支(bfs邻接阵形式) 有向图强连通分支(dfs邻接阵形式) 有向图最小点基(邻接阵形式) 图论_匹配\ 二分图最大匹配(hungary邻接表形式) 二分图最大匹配(hungary邻接阵形式) 二分图最大匹配(hungary邻接表形式,邻接阵接口) 二分图最大匹配(hungary正向表形式) 二分图最佳匹配(kuhn_munkras邻接阵形式) 一般图最大匹配(邻接表形式) 一般图最大匹配(邻接阵形式) 一般图最大匹配(正向表形式) 一般图匹配(邻接表形式,邻接阵接口) 图论_网络流\ 上下界最大流(邻接阵形式) 上下界最小流(邻接阵形式) 上下界最大流(邻接表形式) 上下界最小流(邻接表形式) 最大流(邻接阵形式) 最大流(邻接表形式) 最大流(邻接表形式,邻接阵接口) 最大流无流量(邻接阵形式) 最小费用最大流(邻接阵形式) 图论_应用\ 欧拉回路(邻接阵形式) 前序表转化 树的优化算法 拓扑排序(邻接阵形式) 最佳边割集 最佳顶点割集 最小边割集 最小顶点割集 最小路径覆盖 图论_最短路径\ 最短路径(单源bellman_ford邻接阵形式) 最短路径(单源dijkstra邻接阵形式) 最短路径(单源dijkstra_bfs邻接表形式) 最短路径(单源dijkstra_bfs正向表形式) 最短路径(单源dijkstra+binary_heap邻接表形式) 最短路径(单源dijkstra+binary_heap正向表形式) 最短路径(单源dijkstra+mapped_heap邻接表形式) 最短路径(单源dijkstra+mapped_heap正向表形式) 最短路径(多源floyd_warshall邻接阵形式) 图论_支撑树\ 最小生成树(kruskal邻接表形式) 最小生成树(kruskal正向表形式) 最小生成树(prim邻接阵形式) 最小生成树(prim+binary_heap邻接表形式) 最小生成树(prim+binary_heap正向表形式) 最小生成树(prim+mapped_heap邻接表形式) 最小生成树(prim+mapped_heap正向表形式) 最小树形图(邻接阵形式) 应用\ joseph模拟 N皇后构造解 布尔母函数 第k元素 幻方构造 模式匹配(kmp) 逆序对数 字符串最小表示 最长公共单调子序列 最长子序列 最大子串匹配 最大子段和 最大子阵和 组合\ 排列组合生成 生成gray码 置换(polya) 字典序全排列 字典序组合 组合公式
I 数学分析(Proofs) 简介(Introduction) 0.1 参考文献(References) 1 什么是证明?(What is a Proof?) 1.1 命题(Propositions) 1.2 谓词(Predicates) 1.3 公理化方法(The Axiomatic Method) 1.4 我们的公理(Our Axioms) 1.5 证明命题的含义(Proving an Implication) 1.6 证明「有且仅有」(Proving an「If and Only If」) 1.7 案例证明(Proof by Cases) 1.8 反证法(Proof by Contradiction) 1.9 证明的实战演练(Good Proofs in Practice) 1.10 参考文献(References) 2 良序原则(The Well Ordering Principle) 2.1 良序证明(Well Ordering Proofs) 2.2 良序证明模式(Template for Well Ordering Proofs) 2.3 素数因子分解(Factoring into Primes) 2.4 良序集合(Well Ordered Sets) 3 逻辑公式(Logical Formulas) 3.1 命题中的命题(Propositions from Propositions) 3.2 计算机程序中的命题逻辑(Propositional Logic in Computer Programs) 3.3 等价性和有效性(Equivalence and Validity) 3.4 命题的代数(The Algebra of Propositions) 3.5 SAT 问题(The SAT Problem) 3.6 谓词公式(Predicate Formulas) 3.7 参考文献(References) 4 数学上的数据类型(Mathematical Data Types) 4.1 集合(Sets) 4.2 序列(Sequences) 4.3 函数(Functions) 4.4 二元关系(Binary Relations) 4.5 有限基数(Finite Cardinality) 5 简介(Induction) 5.1 一般归纳法(Ordinary Induction) 5.2 强归纳法(Strong Induction) 5.3 强归纳法、一般归纳法和良序法(Strong Induction vs. Induction vs. Well Ordering) 6 状态机(State Machines) 6.1 状态和转换(States and Transitions) 6.2 不变量原则(The Invariant Principle) 6.3 部分正确性和终止(Partial Correctness & Termination) 6.4 稳定婚姻问题(The Stable Marriage Problem) 7 递归数据型(Recursive Data Types) 7.1 递归定义和结构归纳法(Recursive Definitions and Structural Induction) 7.2 Matched Brackets 字符串(Strings of Matched Brackets) 7.3 非负整数递归函数(Recursive Functions on Nonnegative Integers) 7.4 算术表达式(Arithmetic Expressions) 7.5 递归数据型在计算机科学中的简介(Induction in Computer Science) 8 无限集(Infinite Sets) 8.1 无限基数集(Infinite Cardinality) 8.2 停止问题(The Halting Problem) 8.3 集合的逻辑(The Logic of Sets) 8.4 这些真的有效吗?(Does All This Really Work?) II 结构(Structures) Introduction 9 数论(Number Theory) 9.1 可分性(Divisibility) 9.2 最大公约数(The Greatest Common Divisor) 9.3 神秘的素数(PrimeMysteries) 9.4 算术的基本定理(The Fundamental Theorem of Arithmetic) 9.5 Alan Turing 9.6 模运算(Modular Arithmetic) 9.7 余数运算(Remainder Arithmetic) 9.8 Turing's Code (Version 2.0) 9.9 乘法逆运算和消除(Multiplicative Inverses and Cancelling) 9.10 欧拉定理(Euler's Theorem) 9.11 RSA 公钥加密(RSA Public Key Encryption) 9.12 SAT 与它有什么关系?(What has SAT got to do with it?) 9.13 参考文献(References) 10 有向图和部分排序(Directed graphs & Partial Orders) 10.1 顶点度(Vertex Degrees) 10.2 步长与路径(Walks and Paths) 10.3 临近矩阵(Adjacency Matrices) 10.4 Walk Relations 10.5 有向非循环图标和时序(Directed Acyclic Graphs & Scheduling) 10.6 局部排序(Partial Orders) 10.7 通过集合遏制表征局部排序(Representing Partial Orders by Set Containment) 10.8 线性排序(Linear Orders) 10.9 乘积排序(Product Orders) 10.10 等价关系(Equivalence Relations) 10.11 关系属性总结(Summary of Relational Properties) 11 通信网络(Communication Networks) 11.1 路由(Routing) 11.2 Routing Measures) 11.3 网络设计(Network Designs) 12 简单图(Simple Graphs) 12.1 Vertex Adjacency and Degrees) 12.2 美国性别人口统计(Sexual Demographics in America) 12.3 一些常见的图(Some Common Graphs) 12.4 同构(Isomorphism) 12.5 二部图&匹配(Bipartite Graphs & Matchings) 12.6 Coloring 12.7 Simple Walks 12.8 连接(Connectivity) 12.9 森林和树(Forests & Trees) 12.10 References 13 平面图(Planar Graphs) 13.1 在平面中绘制图(Drawing Graphs in the Plane) 13.2 平面图的定义(Definitions of Planar Graphs) 13.3 欧拉公式(Euler's Formula) 13.4 在平面图中限定边的数量(Bounding the Number of Edges in a Planar Graph) 13.5 Returning to K5 and K3;3 13.6 Coloring Planar Graphs 13.7 Classifying Polyhedra 13.8 平面图的另一种特征化(Another Characterization for Planar Graphs) III 计数(Counting) Introduction 14 逼近求和(Sums and Asymptotics) 14.1 养老金的价值(The Value of an Annuity) 14.2 幂级数求和 Sums of Powers) 14.3 逼近求和(Approximating Sums) 14.4 Hanging Out Over the Edge) 14.5 乘积(Products) 14.6 Double Trouble 14.7 渐进的符号表示(Asymptotic Notation) 15 基数法则(Cardinality Rules) 15.1 由计算另一项计算该项(Counting One Thing by Counting Another) 15.2 计算序列(Counting Sequences) 15.3 广义乘积法则(The Generalized Product Rule) 15.4 除法法则(The Division Rule) 15.5 子集计算(Counting Subsets) 15.6 重复序列(Sequences with Repetitions) 15.7 Counting Practice: Poker Hands 15.8 鸽巢原理(The Pigeonhole Principle) 15.9 包含与排斥(Inclusion-Exclusion) 15.10 组合证明(Combinatorial Proofs) 15.11 References 16 母函数(Generating Functions) 16.1 无穷级数(Infinite Series) 16.2 使用母函数进行计数(Counting with Generating Functions) 16.3 部分分式(Partial Fractions) 16.4 求解线性递归(Solving Linear Recurrences) 16.5 形式幂级数(Formal Power Series) 16.6 References IV 概率论(Probability) Introduction 17 事件和概率空间(Events and Probability Spaces) 17.1 Let's Make a Deal 17.2 四步法(The Four Step Method) 17.3 Strange Dice 17.4 生日原则(The Birthday Principle) 17.5 集合论和概率论(Set Theory and Probability) 17.6 References 18 条件概率(Conditional Probability) 18.1 Monty Hall Confusion 18.2 定义和符号(Definition and Notation) 18.3 条件概率的四步法(The Four-Step Method for Conditional Probability) 18.4 为什么树状图如此有效(Why Tree Diagrams Work) 18.5 全概法则(The Law of Total Probability) 18.6 辛普森悖论(Simpson's Paradox) 18.7 独立性(Independence) 18.8 相互独立性(Mutual Independence) 18.9 概率与置信度(Probability versus Confidence) 19 随机变量(Random Variables) 19.1 随机样本(Random Variable Examples) 19.2 独立性(Independence) 19.3 分布函数(Distribution Functions) 19.4 期望(Great Expectations) 19.5 线性期望(Linearity of Expectation) 20 平均偏差(Deviation from the Mean) 20.1 马尔可夫定理(Markov‘s Theorem) 20.2 切比雪夫定理(Chebyshev's Theorem) 20.3 方差的性质(Properties of Variance) 20.4 随机样本估计(Estimation by Random Sampling) 20.5 估计置信度(Confidence in an Estimation) 20.6 随机变量加和(Sums of Random Variables) 20.7 Really Great Expectations 21 随机步(Random Walks)
本科参加ACM竞赛的过程中积累下来的一部分算法模板,和自己在PKU上面做的一部分题目。 模板目录结构: 目录: 动态规划 O(n^2)的最长上升子序列 nlogn最长上升子序列 高精度 计算几何 Graham扫描法 两线段交点 凸多边形面积 半平面交 计算几何库 数据结构 闭散列法整数hash 开散列法整数hash 字符串hash 堆 二维树状数组 Trie树 二叉查找树 线段树 RMQ LCA+RMQ SB-Tree 数论 生成紧凑素数表 分解质因子 最大公约数 a^b mod n 扩张欧几里德算法 素数表质因子分解 Stirling公式 中国剩余定理 欧拉数(递推法) 欧拉数(公式法) 十进制转负进制 归并排序求逆序数 Pell方程 Catalan数,100以内 欧拉函数讲解 组合计数 组合数计算(double) 组合数计算(高精度) r-组合生成算法 r-排列生成算法 r-错位排列生成算法 图论 传递闭包 欧拉回路判定 有向图欧拉路径 二分图最大匹配 匈牙利算法 二分图最大匹配 HK算法 二分图最大权匹配 KM算法 割边 强连通分量 缩点 Kosaraju算法 最大团 最小树形图 无向图全局最小割 stoer-wagner O(n^3) 最短路径优先算法 SPFA 网络流 最大流:Ford&Fulkerson算法 最大流:Dinic算法 最大流:ek算法 最大流:dsp算法 最大流:hlpp算法 最小费用最大流:bellman_ford找增广路 最小费用最大流:ssp算法 字符串 KMP 通配符匹配 最小表示法 后缀数组 倍增算法 基于多串匹配的有限状态自动机 未分类 归并排序 星期几的计算 N皇后构造法 几个常用的位操作 最大最小定理总结 0/1分数规划总结 (by yxysdcl 2008/11/19) 代码目录结构: 目录: 动态规划 钉子和小球 Hash+dp分词(摩尔电码) 火柴棒等式 DAG图DP,老鼠打洞 最短子路径 最少回文数 矩阵链乘 树形DP 最少的石子填到根节点 树种删除最少的边使刚好剩下P个点 树的支配集 最优连通子集 带背包的树形DP 最小顶点覆盖,判唯一 用最少的点覆盖所有的边 DAG上的记忆化树形DP,博弈 有限状态自动机+树形DP 状态压缩DP 炮兵阵地 Help Bob,买匹萨 匹配数量 堆筛子 全排列式状态DP 计算几何 多边形地图染色 数据结构 Hash 枚举+hash,方程解数 点集对称中心 字符hash,统计出现最多的单词 类此The Happy worm 数据结构 树状数组 覆盖某区间数量统计 Cows Stars 两个树桩数组 二维树状数组 数据结构 双端队列 Sliding Window 数据结构 线段树 Cows 线段染色 排队问题 第K大的数 离散化+线段树 灯光投影 网络赛取连续子序列问题 线段树+树状数组+并查集,转化为排队问题 离散化 离散化矩形切割,矩形覆盖面积统计 覆盖矩形周长统计 离散化矩形切割 灯光投影 搜索 导弹 Bfs+hash状态的抽象,模关系 Bfs变形,钥匙与门 双向广搜 迭代加深 优先队列搜索,过最少的门救人,建图 A*搜索 图论 差分约束 Intervals bellman_ford Intervals SPFA 出纳员的雇佣 不等式组 图论 割边 图染色 拓扑 树 欧拉路径) 割点+统计删除后剩下多少连通图 删除一个点使得连通分量最多 图染色 拓扑排序全部序列 最大生成树 有向图欧拉路径 字典序最小的有向图欧拉路径 图论 匹配 完美匹配FBI Koning定理,泥地 二分图最大独立集 通讯站天线覆盖 二分图拆分后匹配 二分图某边唯一匹配 最小权匹配 海上矿工 floyd预处理 最大权匹配,需要非完全图转完全图 传递闭包+最小路径覆盖 可以重复经过点 图论 网络流 Adding-the-maximum-flow arc 增量网络流 区间枚举,猴子语言+网络流 最小费用最大流 最大流最小割定理 摧毁伞兵 最大流最小割定理 泥地 图论 最短路径 Dijkstra+heap 昂贵的聘礼 最短路变形 树中任意点对最短路和 Bellman_ford 货率 限制长度最短路,负环判连通,点权变边权,改变正负号 表达式求值 算法优先算法求表达式的值 词法分析与算法优先算法,集合运算:差集,并集,交集 矩阵乘法 线段覆盖数量 矩阵构造,nlogn矩阵乘法 2-SAT XOR
知识总结 1 一、整除的性质: 3 二、数的整除特征 3 三、奇偶的性质 4 四、模p运算 4 五、同余的性质 4 六、余数检验 5 七、素数 6 八、素数的检验 7 九、最大公约数 8 十、算术基本定理 9 十一、一些数论的定理 9 十二、二次剩余 9 十三、梅森数 10 十四、完全数 11 十五、费马数 12 十六、完全平方数 12 十七、水仙花数 13 十八、西西弗斯数 13 十九、高度合成数 13 二十、斐波那契数 13 二十一、亲和数 14 二十二、欧拉数 14 二十三、欧拉的其他公式 15 二十四、欧拉方程 15 二十五、勾股数的特点 16 二十六、勾股数系的系和组 17 二十七、勾股数系的性质 17 二十八、二元一次不定方程 18 二十九、中国同余式 18 三十、数列 18 三十一、常识 19 三十二、幻方 19 三十三、克拉茨命题 20 三十三、用牛顿叠代法求高精度倒数 21 三十四、用二分法求解n! 21 三十五、高精度求乘幂 21 三十六、高精度求实数乘幂 22 三十七、高精度求对数 23 三十八、乘法的快速傅立叶转换 23 三十九、FFT 乘法 24 四十、高精度求开方 25 四十一、对原函数进行高精度求解 26 四十二、巴什博奕(Bash Game): 27 四十三、威佐夫博奕(Wythoff Game): 27 四十四、尼姆博奕(Nimm Game): 28 四十五、取火柴游戏 29 四十六、取硬币游戏 30 四十七、分金币 30 四十八、三人行游戏 31 四十九、3个教士和3个土人 31 五十、分酒问题 32 五十一、砝码 33 五十二、杨辉三角 34 五十三、图论的一些定理: 37 五十四、二部图 38 五十五、排列组合问题 39 五十六、计数问题 39 五十七、微积分公式 41 五十八、三角函数公式 43 五十九、空间解析几何和向量代数: 44 六十、多元微积分 44 六十一、多元函数微分法及应用 47 六十二、微分法在几何上的应用: 48 六十三、级数: 49 六十四、微分方程: 52 六十五、数学常用公式 53 六十六、二维图形的周长与面积公式 56 六十七、程序 58

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值