主题:QBASIC编的哥德巴赫全猜想验证程序与质数判断程序,请提意见!
天山雪莲
[专家分:0] 发布于 2007-08-16 22:44:00
我用QBASIC编了哥德巴赫全猜想验证程序与质数查找与判断程序,
请各位QB爱好者看看,并请提出宝贵意见!
回复列表 (共25个回复)
11 楼
天山雪莲 [专家分:0] 发布于 2007-08-17 22:17:00
我从95年开始学电脑的,学的是FOXBASE,QBASIC编程完全是自学。
VB也搞过质数判断程序,不过还是感觉没有DOS编程顺手!
我是从DOS编程时代走过来的人!
12 楼
天山雪莲 [专家分:0] 发布于 2007-08-17 22:23:00
[quote]界面很好,就是按ESC不能退出。[/quote]
我基本采用的是字符控制键控制程序运行的,
在哥德巴赫猜想验证过程中,你可以快速的按ESC键退出程序。
验证过程中的意思是:当你输入一个要验证的数字,屏幕会打出结果,
在没有打完的时候,你按ESC键,就可以退出程序。这个按键时机有一
定难度,必须在输出的过程中,同时按ESC键。
程序不完备之处,请见谅!
13 楼
天山雪莲 [专家分:0] 发布于 2007-08-17 23:01:00
欢迎继续回帖,发表大家的看法!谢谢!
14 楼
强强 [专家分:4740] 发布于 2007-08-17 23:14:00
那请问高手编程现在达到什么境界了呢?
15 楼
moz [专家分:37620] 发布于 2007-08-18 00:14:00
到了input与inkey$之间要抓住时机按ESC的境界了,
这个时机如白马过隙,电光火石,一纵即逝,好好把握.
你就不能检查一个输入值是不是大于0这个条件来退出程序吗?
16 楼
rickone [专家分:15390] 发布于 2007-08-18 00:30:00
[quote]判断质数的核心代码:
INPUT "PLEASE INPUT YOUR INTEGER:", NUM
Y = 1
WHILE NUM >= Y
ZYP:
IF NUM MOD Y <> 0 THEN
Y = Y + 1
GOTO ZYP
ELSE
PRINT NUM / Y; "*"; Y; "="; NUM
Y = Y + 1
END IF
WEND
请提出宝贵意见及评价~![/quote]
随便找个几百bit的伪素数,直接死机。
17 楼
天山雪莲 [专家分:0] 发布于 2007-08-18 00:57:00
[quote]随便找个几百bit的伪素数,直接死机。[/quote]
QB中长整型数有个最大值,输入数值大于此数,就会溢出,
请问如何输入几百BIT的伪素数???
18 楼
moz [专家分:37620] 发布于 2007-08-18 01:22:00
如果天山雪莲确实是好学之人,那么我也诚恳的提几个建议:
1. RickOne是算法版的版主,我虽不了解他有多大能耐,但没见过猪走路也吃过猪肉
(咳,RickOne不要误会,你跟猪肉没有什么关系,我一不小心把你们提到一起而已)
相信对算法的理解总是会比我高不知道高多少.
2. 他的说法也许不太友好,或者说没有顾全你的面子,但他的目的是想指出你的不足.
所以他的动机和方向是好的,你不应该有偏激与逆反的情绪与想法.
3. 对于RickOne说的大值的问题是存在的,首先你要了解一下各变量类型的范围,
还有各变量类型运算处理,
QB取余数的运算最大值只能处理长整形(2带头的10位整数)
你的程序里,变量没有作显式定义,默认是单精度,
如果超出长整形范围,会溢出错误
如果在长整形范围内,会自动转换成整数后取余运算.
就算是我写的质数表,用VB来运算.老半天还没算到8位数,
而你这个程序,一个不小心弄了个八九位数进去,不死机才怪.
(并不是真正的死机,有可能会恢复响应的,如果运气好的话,加上CPU风扇质量过关的话)
4. 你如果真的有兴趣的话,倒是可以去参考一下我的代码,
当然,我不能说我写的有多好,或者比你好之类的,方法总是有很多的.
但我想,你如果认真去看了,肯定会对你的学习有帮助的.
点论坛搜索
输入关键字:关于质数
搜索目标:按主题搜索
选择讨论区:QBasic讨论区
19 楼
天山雪莲 [专家分:0] 发布于 2007-08-18 02:04:00
谢谢Moz中肯的意见,首先,我并不是有逆反情绪,我知道强中更有强中手。
对于上面我写出的核心代码其实是最精简的质数判断代码。它是个小程序。
目的是用QB最小的几行来判断质数。它的意义是参考的意义。我的程序也是
在这个小程序基础上发展起来的。
在我的程序中,《质数查找与判断程序》如果您选5进入快速质数判断模式的话,
判断长整型数值,就算你输入最大的QB允许的长整型数值,在我的程序中,判断
一个非质数都不需要一秒钟,如果正巧你输入的是个长整型质数,那么判断时间
也只是几秒钟。那里的代码做了特别的优化的。
我目前就是碰到这个问题,我希望我的程序能读取更大的数值,而不只是(2带头
的10位整数)在长整数范围内取值计算,目前就是这个问题,我没有突破QB语言的
限制。
在我发布的EXE程序中,都对变量做了定义,dim 变量 as long。所以我的程序能
处理+2147483647以内的所有正整数。
当然我希望我的程序能够无限制的运行下去,而不必考虑数值的限制。
最后,我说说死机的问题。在我的经验中,DOS编这个程序,是不会死机的,电脑会
忠实的执行计算,而不会死机崩溃。剩下的是时间的问题,如果愿意等,电脑会给出
最终答案的。在快速质数判断模块,是不存在电脑让您等久了的问题的。
这就是算法的优化,碰到什么问题,我们就解决什么问题。
对于上面我的文字,请大家批评指正。谢谢!~
20 楼
moz [专家分:37620] 发布于 2007-08-18 02:23:00
呵呵,没想到遇上一个不老实的扮猪吃老虎的人了,
是我走漏眼了,是我有眼无珠了.
我来回复