素数粉 发表于 2008-10-23 13:54:24

请教gxqcn一个问题

能否把PrimeNumber从16位计算机无符号长整型的数值范围扩大到32位计算机甚至64位计算机无符号长整型的数值范围。
mathe也觉得标题使用别人的id不好,修改一下

无心人 发表于 2008-10-23 14:20:25

:Q:

看不懂

风云剑 发表于 2008-10-23 16:17:21

本来就是32位的吧。64位就太大了,我怀疑现在是否有能力求出具体的数值来。

liangbch 发表于 2008-10-23 17:05:16

刚刚看了一下这个程序,该程序有3个功能,
1.统计某个区间素数的个数
方法:输入a和b的值, 且a不等于b,不选择输出到屏幕或者文件

2.列出某个区间的所有素数
方法:输入a和b的值, 且a不等于b,选择输出到屏幕或者文件

3. 分解质因数
方法:输入a和b的值, 且a等于b,则将a分解成几个质数积的形式。


对于分解质因数,使用64bit整数不是不可以,但当a很大是,分解可能话不少时间。

对于列出某个区间的所有素数,如果a,b是64bit数,$|a-b|$可能很大,则无法输出到屏幕或者文件,另外,当a是64bit数时,且很大时,筛素数的时间将很长,无法保证在一个可以接受的时间内输出结果。

mathe 发表于 2008-10-23 17:11:16

1问题不大.
2如果区间长度不是太长应该还好(其实只要算出2^32以内所有素数就好办了),当然计算时间会稍微有点长.
3有点看不懂,但是如果仅仅分解质因数,应该还能够对付.至少比问题2好办.

风云剑 发表于 2008-10-23 17:32:02

1、2^64大约是10^19数量级,即使只要求素数个数,也要花不少时间了。
2、列出素数,这个就麻烦了,如果是1~2^64,不太现实。
3、2^64数量级,分解应该是小事一桩啊。

3个问题中,2是最难的。

liangbch 发表于 2008-10-23 18:18:28

回复 5# mathe 的帖子

mathe 言之有理

gxqcn 发表于 2008-10-23 19:12:59

尽量别在标题中直呼其名。。。

liangbch 在 4# 中已说出了其三个基本功能,
若有算法库 HugeCalc.dll 的支持,还具备随机生成大素数、自动计算两相邻素数的间距等。

当初之所以仅限定在 2^32 以内,只要是考虑到如下几点:
1、与CPU及OS的字长一致,无须自定义数据结构,所以效率比较高(无论是运行还是开发上);
2、该产品为开发快速阶乘过程产生的副产品,即便 HugeCalc 推出 64 位版本,当前的素数范围仍足够;
3、正如前面几位网友说的那样,如果扩大范围,将可能导致一些计算效率、用户内存资源等方面的问题。

当然,并不是说该程序不会再改进,但32位系统下将不再更新了。

如果要保留当前的所有功能,且效率依然犀利无比,
将不得不开发一些新算法,比如快速分解算法,
到时升级将是自然而然、水到渠成的事了。
只是现在不行,太忙,好几个月回家后无法静心写代码。

无心人 发表于 2008-10-23 19:31:22

分解2^64的数字,估计只需要秒级
分解10^40内数字都是秒级的

gxqcn 发表于 2008-10-23 19:43:54

但对我来说,现在还是空白;就象当初我对素性测试一无所知那样。
估计攻克并不难,只是缺时间和精力。
页: [1] 2 3 4
查看完整版本: 请教gxqcn一个问题