质数_百度百科

[](javascript:; "权威专家认证词条")

[](javascript:; "添加义项")[](https://baike.baidu.com/divideload/%E8%B4%A8%E6%95%B0 "拆分词条")

收藏

查看我的收藏

17204 有用+1 已投票;)

927

[zhì shù]  

质数

编辑 锁定 讨论11

同义词 素数一般指质数

本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。

质数(prime number)又称素数,有无限个。

质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数

中文名

质数

外文名

prime  number

别    名

素数

讨论范围

非0自然数

定    义

只有1和它本身两个因数的自然数

反义词

合数

目录

  1. 1 定义
  2. 2 性质
  3. 3 分布规律
  4. 4 数目计算
  5. 5 性质
  6. 6 公式
  7. 素数密度公式
  8. 通项公式
  9. 7 应用
  10. 8 编程
  11. 基本判断思路
  12. 代码
  13. 素性检测
  14. 筛素数法
  15. 9 猜想
  16. 10 孪生素数无限多的证明
  17. 阴性合数定理和阴性素数定理
  18. 阳性合数定理和阳性素数定理
  19. 与孪生素数相对应的完全不等数
  20. 四种等数大小数列的互相渗透
  21. 对应数段与同步区间
  22. 大于S8区间内都有8个以上的完全不等数
  23. 误差分析
  24. 总结
  25. 11 难题
  26. 哥德巴赫猜想
  27. 黎曼猜想
  28. 孪生质数
  29. 梅森质数

质数定义

编辑

质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数

质数性质

编辑

质数的个数是无穷的。欧几里得的《几何原本》中有一个经典的证明。它使用了证明常用的方法:反证法。具体证明如下:假设质数只有有限的n个,从小到大依次排列为p1,p2,……,pn,设N=p1×p2×……×pn,那么,

是素数或者不是素数。

如果

为素数,则

要大于p1,p2,……,pn,所以它不在那些假设的素数集合中。

1、如果 为合数,因为任何一个合数都可以分解为几个素数的积;而N和N+1的最大公约数是1,所以不可能被p1,p2,……,pn整除,所以该合数分解得到的素因数肯定不在假设的素数集合中。因此无论该数是素数还是合数,都意味着在假设的有限个素数之外还存在着其他素数。所以原先的假设不成立。也就是说,素数有无穷多个。

2、其他数学家给出了一些不同的证明。欧拉利用黎曼函数证明了全部素数的倒数之和是发散的,恩斯特·库默的证明更为简洁,哈里·弗斯滕伯格则用拓扑学加以证明。

质数分布规律

编辑

以36N(N+1)为单位,随着N的增大,素数的个数以波浪形式渐渐增多。

孪生质数也有相同的分布规律。

以下15个区间内质数和孪生质数的统计数。

S1区间1——72,有素数18个,孪生素数7对。(2和3不计算在内,最后的数是孪中的也算在前面区间。)

S2区间73——216,有素数27个,孪生素数7对。

S3区间217——432,有素数36个,孪生素数8对。

S4区间433——720,有素数45个,孪生素数7对。

S5区间721——1080,有素数52个,孪生素数8对。

S6区间1081——1512,素数60个,孪生素数9对。

S7区间1513——2016,素数65个,孪生素数11对。

S8区间2017——2592,素数72个,孪生素数12对。

S9区间2593——3240,素数80个,孪生素数10对。

S10区间3241——3960,素数91个,孪生素数19对。

S11区间3961——4752素数92个,孪生素数17对。

S12区间4752——5616素数98个,孪生素数13对。

S13区间5617——6552素数108个,孪生素数14对。

S14区间6553——7560素数113个,孪生素数19对。

S15区间7561——8640素数116个,孪生素数14对。

素数分布规律的发现,许多素数问题可以解决。

质数数目计算

编辑

尽管整个素数是无穷的,仍然有人会问“100,000以下有多少个素数?”,“一个随机的100位数多大可能是素数?”。素数定理可以回答此问题。

1、在一个大于1的数_a_和它的2倍之间(即区间(a, 2a]中)必存在至少一个素数。

2、存在任意长度的素数等差数列。 [1] 

3、一个偶数可以写成两个合数之和,其中每一个合数都最多只有9个质因数。(挪威数学家布朗,1920年)

4、一个偶数必定可以写成一个质数加上一个合成数,其中合数的因子个数有上界。(瑞尼,1948年)

5、一个偶数必定可以写成一个质数加上一个最多由5个因子所组成的合成数。后来,有人简称这结果为 (1 + 5)(中国潘承洞,1968年)

6、一个充分大偶数必定可以写成一个素数加上一个最多由2个质因子所组成的合成数。简称为 (1 + 2) [2] 

质数性质

编辑

质数具有许多独特的性质:

(1)质数p的约数只有两个:1和p。

(2)初等数学基本定理:任一大于1的自然数,要么本身是质数,要么可以分解为几个质数之积,且这种分解是唯一的。

(3)质数的个数是无限的。

(4)质数的个数公式

是不减函数。

(5)若n为正整数,在

之间至少有一个质数。

(6)若n为大于或等于2的正整数,在n到

之间至少有一个质数。

(7)若质数p为不超过n(

)的最大质数,则

(8)所有大于10的质数中,个位数只有1,3,7,9。 [2] 

质数公式

编辑

质数素数密度公式

根据

100以内的素数 100以内的素数

构造函数

a为常数 且

1-1

根据1-1 性质 以多项式

为函数

中的指数

得:

1-2

当 n 为素数或 1 时,

等于 1,当 n 为合数时,

等于 0

得素数密度公式

式中 1 定义为素数。

质数通项公式

素数及伪素数通项公式

把它拓展到实数那么它的切线为:

由切线方程知,素数永远在斜率3的折线上摆动,最大斜率3+

,最小斜率3-

素数的变量n的通项公式

有以上公式能够确定伪素数及素数,那么通过对其变量n的识别,我们可以写出任意素数或伪素数

先确定伪素数的变量n,用n(x,y)来表示它,变量是个三维变量,公式如下:

n为偶数时:x,y 均自然数

n为奇数时:

满足以上条件时是P(n)为素数。

质数应用

编辑

质数被利用在密码学上,所谓的公钥就是将想要传递的信息在编码时加入质数,编码之后传送给收信人,任何人收到此信息后,若没有此收信人所拥有的密钥,则解密的过程中(实为寻找素数的过程),将会因为找质数的过程(分解质因数)过久,使即使取得信息也会无意义。

在汽车变速箱齿轮的设计上,相邻的两个大小齿轮齿数设计成质数,以增加两齿轮内两个相同的齿相遇啮合次数的最小公倍数,可增强耐用度减少故障。

在害虫的生物生长周期与杀虫剂使用之间的关系上,杀虫剂的质数次数的使用也得到了证明。实验表明,质数次数地使用杀虫剂是最合理的:都是使用在害虫繁殖的高潮期,而且害虫很难产生抗药性。

以质数形式无规律变化的导弹和鱼雷可以使敌人不易拦截。

多数生物的生命周期也是质数(单位为年),这样可以最大程度地减少碰见天敌的机会。

质数编程

编辑

质数基本判断思路

在一般领域,对正整数n,如果用2到

之间的所有整数去除,均无法整除,则n为质数。

质数大于等于2 不能被它本身和1以外的数整除

质数代码

Python 代码:

?

1

2

3

4

5

6

7

8

from math `import sqrt`

def is_prime(n):

if `==` `1:`

return False

for `in range2int(sqrt(n))+1):`

if `% == 0`:

return False

return True

Java代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

1`.  `

public static boolean testIsPrime2(`int n){`

if (n <= `3`) {

return n > `1`;

}

for`(int` `i=2`;i<n;i++){

if`(n%i == 0)`

return false`;`

}

return true`;`

}

/*优化后*/

public static boolean testIsPrime3(`int n){`

if (n <= `3`) {

return n > `1`;

}

for`(int` `i=2`;i<=Math.sqrt(n);i++){

if`(n%i == 0)`

return false`;`

}

return true`;`

}

2`.`

public class Prime {

public static void main(String[] args) {

int a = `17//判断17是不是质数`

int c = `0`;

for `int b = 2; b < a; b++) {`

if (a % b != `0`) {

c++;

}

}

if (c == a - `2`) {

System.out.println(a + `"是质数"`);

`else {`

System.out.println(a + `"不是质数"`);

}

}

}

Php代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

function isPrime(`$n) {//TurkHackTeam AVP production`

if `$n <= 3) {`

return $n > 1;

`else if $n` `% 2 === 0 || $n % 3 === 0) {`

return false;

`else {`

for `$i = 5; $i` `* $i <= $n`$i += 6) {

if `$n $i` `=== 0 || $n % (`$i + 2) === 0) {

return false;

}

}

return true;

}

}

C#代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

using System;

namespace 计算质数

 {

class Program

    {

static void Main(`string`[] args)

        {

for `int i = 2,j=1; i < 2100000000&&j<=1000; i++)`//输出21亿内的所有质数,j控制只输出1000个。

            {

if (st(i))

                {

                    Console.WriteLine(`"{0,-10}{1}"`,j,i);

                    j++;

                }

            }

        }

static bool st(`int n)`//判断一个数n是否为质数

        {

int m = (`int`)Math.Sqrt(n);

for`(`int i=2;i<=m;i++)

{

if`(n%i==0 && i!=n)`

return false`;`

           } 

return true`;`

        }

    }

 }

C代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

#include <stdio.h>

#include <windows.h>

int main()

{

double x,y,i;

int a,b;

x = 3.0;

do`{`

i = 2.0;

do`{`

y = x / i;

a = (`int`)y;

if`(y != a)`//用于判断是否为整数

{

if`(i == x - 1)`

{

b = (`int`)x;

printf`("%d\n",b);`

}

}

i++;

}`while`(y != a);

x++;

}`while(x <= 10000.0);//3到10000的素数`

system`("pause");`//防止闪退

return 0;

}

C/C++代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

#include<iostream>

#include<algorithm>

#include<cmath>

using namespace std;

const long long size=100000;`//修改size的数值以改变最终输出的大小`

long long zhishu[size/2];

void work(){`//主要程序`

zhishu[1]=2;

long long k=2;

for`(long` `long` `i=3;i<=size;i++){//枚举每个数`

bool ok=1;

for`(long` `long` `j=1;j<k;j++){//枚举已经得到的质数`

if`(i%zhishu[j]==0){`

ok=!ok;

break`;`

}

}

if`(ok){`

zhishu[k]=i;

cout<<`"count"<<k<<' '`<<i<<endl;

k++;

}

}

}

int main(){

freopen`("zhishu.out","w",stdout);`

cout<<`"count1 2"`<<endl;

work();

return 0;

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

bool isPrime(unsigned `long n) {`

if (n <= 3) {

return n > 1;

`else if (n % 2 == 0 || n % 3 == 0) {`

return false`;`

`else {`

for (unsigned `short i = 5; i * i <= n; i += 6) {`

if (n % i == 0 || n % (i + 2) == 0) {

return false`;`

}

}

return true`;`

}

}

Pascal代码:

?

1

2

3

4

5

6

function su(a:longint):boolean;

var

begin

if a=2 then `exittrue) else for i:=2 to trunc(sqrt(a))+1 do` `if` `a mod i=0 then exitfalse`);

exit`(true);`

end.

Javascript代码:

?

1

2

3

4

5

6

7

8

9

function isPrime(n) {

if (n <= 3) { `return n > 1; }`

if (n % 2 == 0 || n % 3 == 0) { `return false`; }

for `var  i = 5; i * i <= n; i += 6) {`

if (n % i == 0 || n % (i + 2) == 0) { `return false`; }

}

return true`;`

}

Go代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

func isPrime(value int) bool {

if value <= 3 {

return value >= 2

}

if value%2 == 0 || value%3 == 0 {

return false

}

for i := 5; i*i <= value; i += 6 {

if value%i == 0 || value%(i+2) == 0 {

return false

}

}

return true

}

Basic 代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Private Function IfPrime(`ByVal As` `Long) `As Boolean

Dim `As Long`

If x < 0 `Then x = -x`

If x = 2 `Then Return True`

If x = 1 `Then Return True`

If x = 3 `Then Return False`

If x = 0 `Then` 

MsgBox(`"error"`,,)

Return False

End If

For i = 2 `To Int(Sqrt(x)) `Step 1

If `Mod i = 0 `Then Return False

Next i

Return True

End Function

ALGOL代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

begin

Boolean array a[2:100];

integer i,j;

for i := 2 step 1 `until 100 `do

a[i] := `true`;

for i := 2 step 1 `until 10 `do

if a[i] `then`

for j := 2 step 1 `until 1000÷i `do

a[i × j] := `false`;

for i := 2 step 1 `until 100 `do

if a[i] `then`

print (i);

end            

质数素性检测

上下素性判决定法:

首先,本文英文字母都表示整数,上半部B 》3N 》W,下半部B 》W 》3N。大于3的素数只有6N-1和6N+1两种形式,我们只需判定这两种数是素数还是合数即可。

命题 1 对于B=36N+1 型数而言。

若不定方程

有整数解,

则 6(3N-W)+1 是小因子数;6(3N+W)+1 是大因子数。

若不定方程

有整数解,

则 6(3N-W)-1 是小因子数;6(3N+W)-1 是大因子数。

两式都无解,是素数。

命题 2对于B=36N+7 形数而言。

若不定方程

有整数解,

则 6(3N-W)+1 是小因子数,6(3N+W+1)+1 是大因子数。

若不定方程

有整数解,

则 6(3N+2-W)-1 是小因子数,6(3N+W+3)-1 是大因子数。

两式都无解,是素数。

命题 3对于B=36N+13 形数而言。

若不定方程

有整数解,

则 6(3N+1-W)+1 是小因子数,6(3N+1+W)+1是大因子数。

若不定方程

有整数解,

则 6(3N+2-W)-1 是小因子数,6(3N+2+W)-1是大因子数。

两式都无解,是素数。

命题 4 对于B=36N+19 形数而言。

若不定方程

有整数解,

则 6(3N+1-W)+1 是小因子数;6(3N+2+W)+1 是大因子数。

若不定方程

有整数解,

则 6(3N+1-W)-1 是小因子数;6(3N+2+W)-1 是大因子数。

两式都无解,是素数。

命题 5 对于B=36N+25 形数而言。

若不定方程

有整数解,

则 6(3N+2-W)+1 是小因子数,6(3N+2+W)+1 是大因子数。

若不定方程

有整数解,

则 6(3N+1-W)-1 是小因子数,6(3N+1+W)-1 是大因子数。

两式都无解,是素数。

命题 6 对于B=36N+31 形数而言。

若不定方程

有整数解,

则 6(3N+2-W)+1 是小因子数,6(3N+3+W)+1是大因子数。

若不定方程

有整数解,

则 6(3N-W)-1 是小因子数,6(3N+1+W)-1是大因子数。

两式都无解,是素数。

命题 7对于B=36N-1 形数而言。

若不定方程

有整数解,应该是(B+1)

则 6(3N-W)+1 是小因子数;6(3N+W)-1 是大因子数。

若不定方程

有整数解,应该是(B+1)

则 6(W-3N)-1 是小因子数;6(W+3N)+1 是大因子数。

两式都无解,是素数。

命题 8对于B=36N+5 形数而言。

若不定方程

有整数解,

则 6(W-3N)+1 是小因子数,6(W+3N+1)-1 是大因子数。

若不定方程

有整数解,

则 6(W-3N-2)-1 是小因子数,6(W+3N+3)+1 是大因子数。

两式都无解,是素数。

命题 9对于B=36N+11 形数而言。

若不定方程

有整数解,

则 6(W-3N-1)+1 是小因子数,6(W+3N+1)-1是大因子数。

若不定方程

有整数解,

则 6(W-3N-2)-1 是小因子数,6(W+3N+2)+1是大因子数。

两式都无解,是素数。

命题 10 对于B=36N+17 形数而言。

若不定方程

有整数解,

则 6(W-3N-1)+1 是小因子数;6(W+3N+2)-1 是大因子数。

若不定方程

有整数解,

则 6(W-3N-1)-1 是小因子数;6(W+3N+2)+1 是大因子数。

两式都无解,是素数。

命题 11 对于B=36N+23 形数而言。

若不定方程

有整数解,

则 6(W-3N-2)+1 是小因子数,6(W+3N+2)+1 是大因子数。

若不定方程

有整数解,

则 6(W-3N-1)-1 是小因子数,6(W+3N+1)+1 是大因子数。

两式都无解,是素数。

命题 12 对于B=36N+29 形数而言。

若不定方程

有整数解,

则 6(W-3N-2)+1 是小因子数,6(W+3N+3)-1是大因子数。

若不定方程

有整数解,

则 6(W-3N)-1 是小因子数,6(W+3N+1)+1是大因子数。

两式都无解,是素数。

素性检测一般用于数学或者加密学领域。用一定的算法来确定输入数是否是素数。不同于整数分解,素性测试一般不能得到输入数的素数因子,只说明输入数是否是素数。大整数的分解是一个计算难题,而素性测试是相对更为容易(其运行时间是输入数字大小的多项式关系)。有的素性测试证明输入数字是素数,而其他测试,比如米勒 - 拉宾(Miller–Rabin )则是证明一个数字是合数。因此,后者可以称为合性测试。

素性测试通常是概率测试(不能给出100%正确结果)。这些测试使用除输入数之外,从一些样本空间随机出去的数;通常,随机素性测试绝不会把素数误判为合数,但它有可能为把一个合数误判为素数。误差的概率可通过多次重复试验几个独立值a而减小;对于两种常用的测试中,对任何合数n,至少一半的a检测n的合性,所以k的重复可以减小误差概率最多到

,可以通过增加k来使得误差尽量小。

随机素性测试的基本结构:

1、随机选取一个数字a。

2、检测某个包含a和输入n的等式(与所使用的测试方法有关)。如果等式不成立,则n是合数,a作为n是合数的证据,测试完成。

3、从1步骤重复整个过程直到达到所设定的精确程度。

在几次或多次测试之后,如果n没有被判断为合数,那么我们可以说n可能是素数。

常见的检测算法:费马素性检验(Fermat primality test),米勒拉宾测试(Miller–Rabin primality test) ,Solovay–Strassen测试,卢卡斯-莱默检验法(Lucas–Lehmer primality test)。

质数筛素数法

筛素数法可以比枚举法节约极大量的时间(定n为所求最大值,m为≤n的质数个数,那么枚举需要O(n^2)的时间复杂度,而筛素数法为O(m*n),显然m<<n,所以时间效率有很大提升。)。如1000000的数据范围,用筛素数法可在2s内解决。

思路:建立一个bool型数组M,若已知一个数M[k]是质数,那么其i(i为正整数)倍M[k*i]必然为合数,可将其去除。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

//c++代码 all rights reserve.

#include<iostream>

#include<cstdio>

#include<algorithm>

using namespace std;

const long long size=1000000;`//修改此值以改变要求到的最大值`

bool zhishu[size+5]={`false`};

int main(){

freopen`("zhishu.out","w",stdout);`//输出答案至“筛质数(shaizhishu).exe”所在文件夹内

zhishu[2]=`true`;

for`(long` `long` `i=3;i<=size;i+=2)zhishu[i]=true;//所有奇数标为true,偶数为false`

for`(`long long i=3;i<=size;i++){

if`(zhishu[i]){`//如果i是质数

int cnt=2;

while`(cnt*i<=size){`//把i的倍数标为false(因为它们是合数)

zhishu[cnt*i]=`false`;

cnt++;

}

}

}

int cnt=1;

for`(int` `i=2;i<=size;i++){//全部遍历一遍`

if`(zhishu[i]){`//如果仍然标记为true(是质数)则输出

cout<<cnt<<`' '`<<i<<endl;

cnt++;

}

}

return 0;

}

/*

样例输出结果,第一个数是个数,第二个是第几个质数

1 2

2 3

3 5

4 7

5 11

6 13

7 17

8 19

9 23

10 29

11 31

12 37

13 41

14 43

15 47

16 53

17 59

18 61

19 67

20 71

21 73

22 79

23 83

24 89

25 97

*/

筛选法的Java实现,如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

/**

* @title SOE

* @desc 简单的埃氏筛选法计算素数 

* @author he11o

* @date 2016年5月3日

* @version 1.0

*/

public class SOE {

public static int calPrime(`int n){`

if`(n<=1){`

return 0`;`

}

byte`[] origin = new` `byte[n+1];`

int count = `0`;

for`(int` `i=2;i<n+1`;i++){

if`(origin[i] == 0){`

count++;

int k = `2`;

while`(i*k<=n){`

origin[i*k] = `1`; 

k++;

}

}`else`{

continue`;`

}

}

return count;

}

}

采用简单的埃氏筛选法和简单的开方判断素数法计算1000000以内素数的个数的效率比较:

StopWatch '计算1000000以内素数的个数': running time (millis) = 268

-----------------------------------------

ms % Task name

-----------------------------------------

00024 009% 简单的埃氏筛选法;

00244 091% 简单的开方判断素数法。

质数猜想

编辑

哥德巴赫猜想:是否每个大于2的偶数都可写成两个素数之和?

孪生素数猜想:孪生素数就是差为2的素数对,例如11和13。是否存在无穷多的孪生素数?

斐波那契数列内是否存在无穷多的素数?

是否有无穷多个的梅森素数

在n2与(n+1)2之间是否每隔n就有一个素数?

是否存在无穷个形式如X2+1素数?

黎曼猜想

质数孪生素数无限多的证明

编辑

质数阴性合数定理和阴性素数定理

大于3的素数只分布在6n-1和6n+1两数列中。(n非0自然数,下同)

6n-1数列中的合数叫阴性合数,其中的素数叫阴性素数(q)。

6[6NM+(M-N)]-1=(6N+1)(6M-1)(N M两个非0自然数,N=〈 M,下同)

6乘以阴性上等数减去1等于阴性上合数。

6[6NM-(M-N)]-1=(6N-1)(6M+1)

6乘以阴性下等数减去1等于阴性下合数。

在6n-1数列中只有这两种合数,余下就是阴性素数了,所以就有阴性素数定理

x=/=6NM+-(M-N)

阴性不等数不等于阴性上下两式。

6x-1=q

6乘以阴性不等数减去1等于阴性素数。

质数阳性合数定理和阳性素数定理

6n+1数列中的合数叫阳性合数,其中的素数叫阳性素数(P)。

6[6NM+(N+M)]+1=(6N+1)(6M+1)

6乘以阳性上等数加上1等于阳性上合数。

6[6NM-(N+M)]+1=(6N-1)(6M-1)

6乘以阳性下等数加上1等于阳性下合数。

在6n+1数列中只有这两种合数,余下就是阳性素数了,所以就有阳性素数定理

X=/=6NM+-(N+M)

阳性不等数不等于阳性上下两式。

6X+1=P

6乘以阳性不等数加上1等于阳性素数。

质数与孪生素数相对应的完全不等数

(X)=/=6NM+-(M+-N)

完全不等数,它既不等于阴性上下两式;也不等于阳性上下两式。

6(X)+1=P

6乘以完全不等数加上1等于阳性素数;

6(X)-1=q

6乘以完全不等数减去1等于阴性素数。

一个完全不等数所产生的阴性素数q和阳性素数P就是一对孪生素数.

并且完全不等数与孪生素数是一一对应的.

四。阴阳四种等数在自然数列中的分布概况

6NM+(M-N)=阴性上等数 6NM-(M-N)=阴性下等数

6NM+(N+M)=阳性上等数 6NM-(N+M)=阳性下等数

为了搞清它们在自然数中分布情况,把四式中的N叫级别因子数,M叫无限因子数。

四种等数的每一个级别的最小等数都在6NN+-(N+N)范围。

每一级别的上等数相邻两等数距离是6n+1,在自然数列中比例是1/(6n+1),阴阳两种上等数每个级别的比例合计是2/(6n+1),(但实际是略少于这个比例,因每一级别的底部都没有这个级别的等数。)

每一级别的下等数相邻等数的距离是6n-1,在自然数列中的比例是1/(6n-1),阴阳两种下等数的每个级别的合计比例是2/(6n-1),(但实际是略少于这个比例,因每一级别的底部都没有这个级别的等数。)

在相对应的级别标准单位的连续自然数筛掉一个级别的四种等数后,剩下非该级别的自然数的比例是[(6N-1)(6N-3)]/[(6N+1)(6N-1)].并且是精准的。

质数四种等数大小数列的互相渗透

自然数列中在阴性方面有阴性上等数数列和阴性的下等数数列;自然数数列在阳性方面阳性上等数数列和阳性下等数数列。它们的级别有无限多,每一个级别的数列的等数也是无限多的。同一种等数级别不同的数列都是互相渗透而产生重叠,并以两级别的等数距离的乘积而严格地重叠的。筛掉N及以下级别的等数用连乘式正好可以表示它们的渗透重叠关系。

四种等数数列之间都有互相渗透而重叠,只有同一级别阴阳上上数列.下下数列没有渗透。

如第一级别的阳性下等数,从4开始每隔5个自然数就是一个第一级别的阳性下等数,它的比例是1/5,只要大于3的任何连续5个自然数,第一级别阳性下等数的比例是1/5,并且永远不变。第一级别的阴性下等数从6开始每隔5个个自然数就是一个阴性下等数,它的比例是1/5,只要大于5的连续5个自然数,第一级别阴性下等数的1/5的比例也是永恒的。这样第一级别的阴阳两种下等数的比例是2/5,在任何大于5的5个连续自然数这个比例也是永恒的。第一级别的阴阳两种上等数2/7,只要是连续7的自然数这个比例也是永恒的。由于上下两等数的互相重叠,它们的比例是20/35,为什么不是4/7,因为只有在大于7的连续35个自然数这个比例是不变的,如果连续7个自然数,它的比例有时是2/7,有时是3/7,有时是4/7.

其它级别也是一样的。但如果这个级别的等数间隔距离是合数的,这个级别的等数都与前面级别的等数重叠的,所以这些级别就不用计算了。

这样就立出以下的计算公式:

(6NN+6N)*3/5*5/7*9/11*11/13......(p-2)/p

(6NN+6N)是一个自然数的大体表达式,P《=N N以内最大的素数。

质数对应数段与同步区间

1、对应数段和精准的比例

计算一个级别的四种等数,只有在同一级别的对应数段为单位才是精准的比例,不然就有误差。

一个N级别的标准单位是(6N+1)(6N-1);在计算N级别及以下的四种等数,它们的对应数段是N级别及以下的所有有性素数(不包括2和3的素数)的乘积。

对应数段的增大速度非常快。

对应数段的对应位置一定要在大于最大级别 的最小阴性等数。

在这位置以上任何连续的对应数段为单位的自然数中,它们的自己的等数是一定的,比例是精准的(不包括大于它的级别等数)。

2、与素数分布基本同步的SN区间

把自然数划分成12,24,36……以12为递增的一个个区间,这样的区间叫SN区间。即:

12(1+2+3+……+N)-12(1+2+3+......+(N-1)=(6N^2+6N)-[6(N-1)^2+6(N-1)]=12N

SN区间与四种等数数列是同步的。

在这样的区间内包括N级别及以下的所有四种等数数列的等数,并没有比N级别大的数列等数,与四种等数的级别是完全同步的,所以与素数的分布也是同步的。

质数大于S8区间内都有8个以上的完全不等数

在每一个SN区间只有存在1至N级别的四种数列等数,每一级别等数的比例是可以确定,由于上下级别的渗透。就可以拿以下式来计算S8区间的完全不等数的至少个数。

12*8*11/35*95/143*251/323*479/575*779/899*1151/1295*1593/1763*2111/2303=8.2768

(由于计算的区间不是对应的标准单位,肯定会有误差,为保险起见,把各级别中合数也给算上,一个级别中上下两种等数的重叠则没有算。)

其他每一个SN区间可用这种方法计算.

随着区间的增大完全不等数计算的数量也会越来越多.以后都会超过8个.

质数误差分析

在计算任何区间的等数,由于标准的比例与计算的区间都不能整除,所以存在误差是一定,由于误差掩盖了等数的精准比例。

由于各个区间与相对应的标准单位不能同步,一个级别及以下的所有有性素数的乘积为这个级别的对应的标准单位,一个标准单位比对应的级别区间大得很多,如第一和第二两个级别的标准单位就有5005,第二个N区间只有24,在5005的连续自然数中就有许多比第二级别大得多的等数,所以计算出的数值大多会有误差。只有用标准的单位计算相对应的所有级别的等数才不会有误差,由于标准单位的增速比等数级别快得多,所以就没有所有等数级别的标准区间。

另外,可用最严格下取整的误差分析方法,将SN区间捆绑成1,2,4,8,16......2^(N-1)的LN区间.在每一个大于S8的SN区间计算都大于8个完全不等数,在每一个LN区间都有2^N-1级别等数数列, 每级级别有4种等数数列,每一级别一种等数筛一次误差极限是1 .每一个LN区间误差极限是4*(2^N-1).

8*2^(N-1)-4*(2^N-1)=4

最严格下取整后大于L4的区间仍然还有4个完全不等数。

质数总结

根据以上的论证,在大于S8区间每一个SN区间都有8个以上的完全不等数.

严格的下取整后,大于L4的每一个LN区间都还有多于4个的完全不等数。

LN区间是无限多的,完全不等数与孪生素数对是一一对应的,所以孪生素数也是无限多的。

这个证明期待着权威的表态。 [2] 

质数难题

编辑

质数哥德巴赫猜想

哥德巴赫猜想证明的困难在于,任何能找到的素数,在以下式中都是不成立的。2*3*5*7*。。。。。。*PN。。。。。。*P=PN+(2*3*5*7*。。。。。。*P-1)*PN前面的偶数减去任何一个素数PN的差必是合数.

在1742年给欧拉的信中哥德巴赫提出了以下猜想:任一大于2的整数都可写成两个质数之和。因现今数学界已经不使用“1也是素数”这个约定,原初猜想的现代陈述为:任一大于5的整数都可写成三个质数之和。欧拉在回信中也提出另一等价版本,即任一大于2的偶数想陈述为欧拉的版本。把命题"任一充分大的偶数都可以表示成为一个素因子个数不超过a个的数与另一个素因子不超过b个的数之和"记作"a+b"。1966年陈景润证明了"1+2"成立,即"任一充分大的偶数都可以表示成二个素数的和,或是一个素数和一个半素数的和"。 今日常见的猜想陈述为欧拉的版本,即任一大于2的偶数都可写成两个素数之和,亦称为“强哥德巴赫猜想”或“关于偶数的哥德巴赫猜想”。

从关于偶数的哥德巴赫猜想,可推出任一大于7的奇数都可写成三个质数之和的猜想。后者称为“弱哥德巴赫猜想”或“关于奇数的哥德巴赫猜想”。

若关于偶数的哥德巴赫猜想是对的,则关于奇数的哥德巴赫猜想也会是对的。1937年时前苏联数学家维诺格拉多夫已经证明充分大的奇质数都能写成三个质数的和,也称为“哥德巴赫-维诺格拉朵夫定理”或“三素数定理”。2013年,秘鲁数学家哈拉尔德·赫尔弗戈特在巴黎高等师范学院宣称:证明了一个“弱哥德巴赫猜想”,即“任何一个大于7的奇数都能被表示成3个奇素数之和”。

质数黎曼猜想

黎曼猜想是关于黎曼ζ函数ζ(s)的零点分布的猜想,由数学家波恩哈德·黎曼(1826~1866)于1859年提出。德国数学家希尔伯特列出23个数学问题。其中第8问题中便有黎曼假设。素数在自然数中的分布并没有简单的规律。黎曼发现素数出现的频率与黎曼ζ函数紧密相关。黎曼猜想提出:黎曼ζ函数ζ(s)非平凡零点(在此情况下是指s不为-2、-4、-6等点的值)的实数部份是1/2。即所有非平凡零点都应该位于直线1/2 + ti(“临界线”(critical line))上。t为一实数,而i为虚数的基本单位。无人给出一个令人信服的关于黎曼猜想的合理证明。

在黎曼猜想的研究中,数学家们把复平面上 Re(s)=1/2 的直线称为 critical line。 运用这一术语,黎曼猜想也可以表述为:黎曼ζ 函数的所有非平凡零点都位于 critical line 上。

黎曼猜想是黎曼在 1859 年提出的。在证明素数定理的过程中,黎曼提出了一个论断:Zeta函数的零点都在直线Res(s) = 1/2上。他在作了一番努力而未能证明后便放弃了,因为这对他证明素数定理影响不大。但这一问题仍然未能解决,甚至于比此假设简单的猜想也未能获证。而函数论和解析数论中的很多问题都依赖于黎曼假设。在代数数论中的广义黎曼假设更是影响深远。若能证明黎曼假设,则可带动许多问题的解决。

质数孪生质数

证明36N(N+1)+-1形孪生素数无限多。

36N(N+1)+-1形的孪生素数叫雁荡山孪生素数。如这种数对不是孪生素数的,它必有一边或双边被小于它素数整除。

在这种数对中2和3不能整除它们,所以2和3不参加筛选;用5当筛子时,N是除以5余2的所产生的阴性数(6n-1)能被5整除,N除以5余1,3,4和0都不能被5整除;不管N除以5余1.2.3.4.0,所产生的阳性数(6n+1)都不能被5整除,这样所有的自然数中就有1/5被筛掉了。

用7当筛子时,N除以7余2和4所产生的阳性数能被7整除,不管N除以7余1.2.3.4.5.6.0,所产生的阴性数都不能被7整除。这样就有2/7被筛掉了。

用11当筛子时,不管N除以11余1.2.3.4.5.6.7.8.9.10.0,所产生的阴性数和阳性数都不能被11整除,11是一个无效筛子,不参加筛选。
  总之,所有的素数在筛选N时有4种情况,一,不参加筛选。二,单一参加筛选的,如5,(5是唯一一个单一参予筛选的)。三,成对单边参加筛选的。四,成对两边都参加筛选的。
  N是无限多的,被5筛掉了1/5,剩下还是无限多的。再被7筛掉了2/7,剩下的还是无限多的。再一个个筛下去不管筛掉的是2/P还是4/P,剩下永远是无限多的。
  雁荡山孪生素数就是无限多的。

1849年,波林那克提出孪生质数猜想(_the conjecture of twin primes_),即猜测存在无穷多对孪生质数。猜想中的“孪生”是指一对质数,它们之间相差2。例如3和5,5和7,11和13,10,016,957和10,016,959等等都是孪生质数。

英国数学家戈弗雷·哈代和约翰·李特尔伍德曾提出一个“强孪生素数猜想”。这一猜想不仅提出孪生素数有无穷多对,而且还给出其渐近分布形式。2013年5月14日,《自然》(Nature)杂志在线报道张益唐证明了“存在无穷多个之差小于7000万的素数对”,这一研究随即被认为在孪生素数猜想这一终极数论问题上取得了重大突破,甚至有人认为其对学界的影响将超过陈景润的“1+2”证明。 [3] 

36N(N+1)+ -1形的孪生素数,N《100000000 有109128对。

质数梅森质数

梅森素数编选法

根据素数作为因子数在2^N-1数列中的分布规律而编选梅森素数。

一 在2^N-1平方根以内没有奇素数的,这个指数的数就是梅森素数,后面的指数能被这个梅森素数整除的都有这个梅森素数的因子,周期重复的都编上这个因子数。

二 在2^N-1数列中N是合数的,2^N-1是由前面素因子和新增的因子数组成,只要除去前面的因子数就能得到新的因子数,新的因子数也以这个指数为周期重复出现,并在后面重复的数编上这个因子数。

三 指数是素数的,剩下的因子素数根据减1能被指数整除来选合,选合后并在后面的周期重复的数编上这些因子数;剩下的因子素数在2^N-1平方根以内选完后,还有梅森数空着,这个梅森数就是梅森素数,并在后面周期重复的数编上为些因子数。

根据以上的方法操作如下:

把2^n-1的指数都展开,从2开始编下去。
  指数2的数值是3,3的平方根内没有奇素数,所以它是梅森素数,凡是指数能被2整除的都有3的因子数,后面以2为周期编上因子数3;
  指数3的数值是7,7的平方根内没有奇素数,所以它也是梅森素数;凡是指数能被3整除的都有7的因子数,以3为周期编上因子数7;
  指数4数值是15,4能被2整除所以有3的因子数,15除以3等于5,5是新出现的因子数,凡是指数能被4整除的,都有5的因子数,后面以4为周期编上因子数5;
  指数是5数值是31,31的平方根以内只有3和5两个奇素数,3和5已是指数2和4的因子数了,所以这个梅森数是梅森素数,凡是指数能被5整除的,都有31的因子数,后面以5为周期编上因子数31;
  指数6数值是63,6比较特别,凡是指数能被6整除的都会再增一个3的因子数,它是唯一一个不会新增其他因子数的数,后面以6为周期再编上一个因子数3;
  指数7数值是127,127的平方根以内只有奇素数11还没有用上(实际以后都会用上的),11减1不能被7整除,所以127也是梅森素数,凡是指数能被7整除的都有127的因子数,后面以7为周期编上因子数127;
  指数8数值是255,增加了17的因子数,凡是指数能被8整除的都有17的因子数,后面以8为周期编上因子数17;
  指数9数值是511,新增73的因子数,凡是指数能被9整除的都有73的因子数,后面以9为周期编上因子数73;
  指数10数值是1023,新增11的因子数,凡是指数能被10整除的都有11的因子数,后面以10为周期编上因子数11;
  指数11数值是2047,2047的平方根内还有43,41,37,29,23,19,13等奇素数(只要往后多编一些,留下的数就更少了),只要将这几个数都减去1,那一个数被11整除,只有23-1能被11整除,2047/23=89,23和89是它的因子数,两个因子数都是新增加的,因为它是梅森合数,凡是指数能被11整除的都有23和89的因子数,后面以11为周期编上因子数23和89;

指数12数值是4095,已有的因子数3*7*5*3,新的因子数是13,凡是后面指能被12整除的,都编上因子数13。

指数13数值是8191,8191的平方根内还有83,79,73,71,67,61,59,53,47,43,41,29,19等素数,其中只有79-1能被13整除,用79试除也是不行,所以8191也梅森素数。
  一直编下去,每一个指数至少都会新增一个素数的因子数,不是梅森素数和梅森合数的因子数都能编选出来,没有选到的就是梅森合数的因子数和梅森素数。
  编梅森数时,根据素数减1能被指数整除的定理,从剩下素数中选合。

2^N-1的平方根以内的素数都被因子数选完,留下就是梅森素数了。

梅森素数的近似计算公式:

3*5/3.8*7/5.8*11/9.8*13/11.8......P/(P-1.2)-1=M

P是梅森数的指数,M是P以下的梅森素数的个数。

以下是计算的数值与实际数的情况:

指数5,计算2.947,实际3 ,误差0.053;

指数7,计算3.764,实际4 ,误差 0.236;

指数13,计算4.891,实际5,误差0.109;

指数17,计算5.339,实际6,误差0.661;

指数19,计算5.766,实际7,误差1.234;

指数31,计算6.746,实际8,误差1.254;

指数61,计算8.445,实际9,误差0.555;

指数89,计算9.201,实际10,误差0.799;

指数107,计算9.697,实际11,误差1.303;

指数127,计算10.036 ,实际12,误差1.964;

指数521,计算13.818,实际13,误差-0.818;

指数607,计算14.259,实际14,误差-0.259;

指数1279,计算16.306,实际15,误差-1.306;

指数2203,计算17.573,实际16,误差-1.573;

指数2281,计算17.941,实际17,误差-0.941;

所有的奇素数都是准梅森数(2^N-1)的因 子数,则梅森合数的因子数是只有素数中的一部份。

在2^N-1的数列中,一个素数作为素因子第一次出现在指数N的数中,这个素数作为因子数在2^N-1数列中就以N为周期出现。在这种数列中指数是偶数的都等于3乘以四倍金字塔数。

在2^N-1数列中,指数大于6的,除梅森素数外,都有新增一个或一个以上的素数为因子数,新增的因子数减1能被这个指数整除。

一个梅森合数的因子数只有唯一一次出现在一个梅森合数中。

一个是梅森素数的素数,它永远不是梅森合数的因子数。

一个是前面的梅森合数的因子数,它永远不会是后面的梅森合数的因子数。

所有梅森合数的数因子减1都能被这个梅森合数的指数整除,商是偶数。

一个素数在不是梅森合数的准梅森数中第一次以因子数出现,这个素数减1能被这个准梅森数的指数整除,商不一定是偶数。

梅森素数都在[4^(1-1)+4^(2-1)+4^(3-1)+......+4^(n-1)]*6+1数列中,括符里种数暂叫四倍金字塔数。

凡是一个素数是四倍金字塔数的因子数,以后就不是梅森合数的因子数。

在4^(1-1)+4^(2-1)+4^(3-1)+......+4^(n-1)数列中的数,有不等于6NM+-(N+M)的数乘以6加上1都是梅森素数。

在2^P-1平方根以下的素数都以素因子在以前准梅森数中出现了,那这个梅森数必是梅森素数。但它的逆定理是不成立的。如果还没有出现在以前的准梅森数中的素数,它也不定是梅森合数的因子数。

17世纪还有位法国数学家叫梅森,他曾经做过一个猜想:当2p-1 中的p是质数时,2p-1是质数。他验算出:当p=2、3、5、7、17、19时,所得代数式的值都是质数,后来,欧拉证明p=31时,2p-1是质数。 p=2,3,5,7时,2p-1都是素数,但p=11时,所得2,047=23×89却不是素数。

梅森去世250年后,美国数学家科尔证明,267-1=193,707,721×761,838,257,287,是一个合数。这是第九个梅森数。20世纪,人们先后证明:第10个梅森数是质数,第11个梅森数是合数。质数排列得杂乱无章,也给人们寻找质数规律造成了困难。

迄今为止,人类仅发现49个梅森质数。美国中央密苏里大学于2016年1月7日发现的质数,为迄今发现的最大质数,同时是一个梅森质数。由于这种质数珍奇而迷人,它被人们称为“数学珍宝”。值得一提的是,中国数学家和语言学家周海中根据已知的梅森质数及其排列,巧妙地运用联系观察法和不完全归纳法,于1992年正式提出了梅森素质分布的猜想,这一重要猜想被国际上称为“周氏猜测”。

GIMPS)项目于2016年1月7日找到人类已知的最大素数274,207,281-1,该素数有22,338,618位,是第49个梅森素数。

2017年12月26日,美国田纳西州日耳曼敦的GIMPS志愿者乔纳森·佩斯(JonathanPace)发现了第50个梅森素数277232917-1。这个超大素数有23249425位数,再次刷新了已知最大素数纪录。新的纪录是M82589933,由美国佛罗里达州奥卡拉的帕特里克·罗什在2018年12月7日发现。

参考资料

词条标签:

科学百科数理科学分类 , 非科学 , 文化


Original url: Access
Created at: 2019-05-24 10:32:16
Category: default
Tags: none

请先后发表评论
  • 最新评论
  • 总共0条评论