这一部分是关于质数的算法,包括最基本的判定质数、分解质因数,以及线性质数筛,欧拉函数等等。

IsPrime

判断传入的整数是不是质数,并返回一个布尔值。

参数

Name Type Description
p int 待判断是否为质数的整数

返回值

Name Type Description
- bool 如果传入的参数是质数返回true,不是的话返回false

使用示例

  1. x := algorithm.IsPrime(7)
  2. y := algorithm.IsPrime(9)
  3. log.Println(x, y)
  4. //代码输出
  5. true false

DevidePrime

任何整数都可以分解成形如Prime - 图1的标准形式。其中Prime - 图2是整数N的质因子, Prime - 图3表示N包含质因子Prime - 图4的个数。
DevidePrime可以对传入的整数N进行标准化,返回一个int-int的map类型,key代表Prime - 图5,value代表Prime - 图6

参数

Name Type Description
p int 待分解的整数

返回值

Name Type Description
res map[int]int key代表质因子,value代表对应的幂数。

使用示例

  1. x := algorithm.DevidePrime(435)
  2. log.Println(x)
  3. //代码输出
  4. map[3:1 5:1 29:1]

GetPrime

Prime - 图7
Prime - 图8

使用示例

  1. x := algorithm.GetPrime(100)
  2. log.Println(x)
  3. //代码输出
  4. [2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73
  5. 79 83 89 97]

Phi

Prime - 图9

使用示例

  1. x := algorithm.Phi(9)
  2. log.Println(x)
  3. //代码输出
  4. 6

BatchPhi

Prime - 图10
Prime - 图11
Prime - 图12
该函数结合线性质数筛进行运算,时间复杂度为O(n)

使用示例

  1. x := algorithm.BatchPhi(100)
  2. log.Println(x)
  3. //代码输出
  4. [114514 1 1 2 2 4 2 6 4 6 4 10 4 12 6 8 8 16 6 18 8 12 10 22
  5. 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
  6. 32 24 52 18 40 24 36 28 58 16 60 30 36 32 48 20 66 32 44 24 70 24 72 36 40 36 60
  7. 24 78 32 54 40 82 24 64 42 56 40 88 24 72 44 60 46 72 32 96 42 60 40]