素数的计算(1)基础工程的描述

QQ342139996【期望有更多的伙伴来一起探索计算机的世界】

一个偶然的机会我开始想将自己的一些工作的经验总结下来,但是没有一个好的地方来发泄,就找了一个比较难的课题来搞一下。

计算一个世界上最大的素数,首先我们需要知道的是,目前最大的素数是多少,我们咋能超越他,目前干了一个月了,感觉超越他基本上不靠谱。

不过,这也是我的一个个人经历,希望记录下来,就算是一个失败的作品记录吧,感觉总有一些东西是有意义的。


目标:找到世界上最大的素数

需要做的工作

1、目前的最大的素数是多少

百度一下就知道了,2016年1月发现的,p=2^74207281-1

2、他们咋搞的

也是百度一下,搞这个的,都是和数学有很大的关系,但是感觉他们猜测的成分很高,没有得到有利的证明

但是也得到了不少心得

3、总结一下自己的第一步应该如何迈出

定义什么是素数,就是大于1,不能被分解的数字,也就是非合数

2 3 5 7 9 11 13 17 19 23 29 31 37 ......

我本人是做C开发的,就用c来实现吧,需要啥工具都能自己造,虽然效率很低,但是很多事情都是可控的。

第一步,确认了,用c写一个简单的素数计算。别想太多,先迈出第一步。


int i = 0;

for (i=3;;i++) 因为我不知道如何直接定义到最大的素数哪里去,就从0开始,看看如何走到最后一步去

3 4 5 6 7 8 ....... 逐个增加

int j = 0;

for (j=2; j<i ; j++) 搞一个被除数,素数的第一个特性就是不能被小于自己的任何数整出掉,

ok,我们能初步的见到第一个算法了。


int i = 0;

int j = 0;

for (i=3; ; i++)

{

for (j=2; j<i; j++)

{

if (i%j == 0)

{

break;

}

}

printf("su : [%d]\n", i);//查了一遍,发现自己不能被分解,那么就是素数了

}


第一个逻辑算是完成了,这样我们就有出发的基础了。

2、观察自己的第一个作品和自己的目标有多大的差距,发现差距不小。

gcc 以后 执行他。发现,100w以内的数字,计算速度还行,到了100w以后,这个模型就是一个垃圾了。

与这个 2^74207281-1 的差距不是一般的小啊。


明显可见的问题,我们先来解决一下

1、int能够表达的范围,是多少呢?

2、如果我想做一个超大数字的计算,这个数字有1亿位数,我该如何设计

3、基础的大数运算,是否能够满足高速运算的需求

4、如果想做分布式运算,该如何搞

5、自己的素数算法是否有地方可以改进

6、2016年到2017年一年的时间了,为何没有更大的素数出现,前进一步是否有目前计算领域无法跨越的鸿沟。

7、如果计算一个G大小的数字,在平行推进时,若时间单位时以年为计算单位,自己的工作是否能够坚持下来。

8、如果这将是一个毕生的工作,项目的可持续发展如何做。


3、不管那么多了,从基础入手吧,能掌握一些,熟练一些,总是没有坏处的。

简单的思考一下上面的问题。

1、 int 是一个数字类型,在计算领域里面,存储用的是bit,0和1

8bit 是一个 byte,也就是 00000000,或者11111111

一个byte能表达一个什么范围的数字呢?

0 - 2^8 ---- > 0 1 2 4 8 32 64 128 256

一个int呢在32位计算机里面,是4个byte,默认是这样,我就当默认的是对的,不对再说吧

如果用无符号来表示的话,那就是2^(8*4) 4294967296

这看起来是一个很大的数字,不过数位数就不经数了,10位而已,距离1亿位,仅仅是刚起步。

查询了一下,当前的数字表达标准模型,没有来描述这么大数字的,那就只能自己造一个超大数的体系了。 

其他问题,等待第二弹吧,我们来逐步解开这个工程,喜欢小伙伴和我qq交流,打电话不方便了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值