数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
查看: 8049|回复: 18

[原创]请教一个编程问题

[复制链接]
发表于 2010-5-10 15:20 | 显示全部楼层 |阅读模式
[这个贴子最后由白新岭在 2010/05/13 04:55pm 第 3 次编辑]

[watermark]这个程序大概需要这样的几个控件和步骤(因为自己对这个一窍不通,措辞有点词不达意,我是根据自己在Excel软件中的函数和自己的手工操作步骤来叙述的)。一个素数表,存放100万内的素数,当然要按大小顺序编号入座,以便后边好随时根据需要和条件来调取。有一个初始值,有一个外循环次数,它的值可以从k开始,到k+n结束,其关系式为:初始值+(k+外循环次数n)*步长,也就是说,假设初始值为99,步长为2310的话,则外循环第11次(初始k=3)需要判断的值为99+(3+11)*2310=32439.
如果n=100,则外循环为101次(在程序中n是从0开始吧)。
然后有m个偶数(余数)0,2a,2b,2c,....。一般的把m限制在15个以内吧,在大平现在的计算机是无法计算的。也就是说m个预先给的常量一般为1-15个偶数。我们可以假设判断条件(素数)是从大于最大的余数以后开始被调入的。内循环是,每确定一个值n,把它代入关系式后,判断新值是否符合条件,符合条件就累计一次,不符合条件就不计数。
判断方法,从第一个素数开始依次调入每一个素数(小于被判断值的开方数),对被判断值对素数求余,然后在与预先给定的余数比较,预先给的余数中有此余数,就结束内循环(且不累计),进入下一个外循环值n;如果没有与其相同的余数,则继续调入下一个素数进行判断,如此反复进行下去,直到最后一个大素数参与判断完为止(当然这个大素数,最后参与判断的素数小于等于被判断值的开方值),到此还没有被排除的数视为符合所有条件的被判断数,次数累计一次,同时把此被判断值输送到预先设计好的表中储存,以备用。
把所有n都判断完为止。
具体题,筛选19+(3+0至100)*30中符合条件的数,计数并输出实际值,预先给的余数为0,2,6,8.
这里初始值为19,被判断的数数量为101个(即外循环次数为101次),单个被判断值提前给的限定条件有4个余数0,2,6,8.
为了不出现矛盾,可以从素数11开始,初始值定为109(或169,199),外循环次数设为1000,即n从0取到999.
最大参与素数为:SQRT(109+999*210).
[/watermark]步长这里为210(2*3*5*7),之所以从11开始,是因为前4个素数已经参与判断了,初始值通过了四道素数关卡。至于初始值可以从给的三个数中任意选一个。
169不可以做初始值,mod(169,7)=MOD(8,7),应该从19,109,199中选取初始值。
筛选出来的被判断值是一组四胞胎素数群的最后一个素数。
 楼主| 发表于 2010-5-10 15:52 | 显示全部楼层

[原创]请教一个编程问题

[这个贴子最后由白新岭在 2010/05/12 01:36pm 第 3 次编辑]

在Excel软件环境中,给出一个自定义函数流程图或加载步骤也可以。例如求余数,函数中也是两个自变量。只不过定义;xmod(x,y)=x-y*int(x/y).怎么把此自定义函数加载到Excel中。要详细步骤,过程
 楼主| 发表于 2010-5-12 12:18 | 显示全部楼层

[原创]请教一个编程问题

不知到zhaolu48先生是否看到本贴,陆教授很忙,没有时间回复这个问题,zhaolu48先生最近也没有来网上看一看了,如果看到了,以及其他网友看到了,会编程的,我希望得到你们的帮助。
 楼主| 发表于 2010-5-13 10:44 | 显示全部楼层

[原创]请教一个编程问题

这里喜欢编程的网友太少了。
 楼主| 发表于 2010-5-14 09:54 | 显示全部楼层

[原创]请教一个编程问题

本帖最后由 白新岭 于 2016-8-9 01:51 编辑

在歌猜专区,vfbpgyfk先生给出了基本框架,但是程序运行结果不对。
我已经对出现位置进行了解释,不知道是我说的不清楚,还是他没有理解了。
到现在,程序运行结果也不对。
 楼主| 发表于 2010-5-14 11:08 | 显示全部楼层

[原创]请教一个编程问题

白新岭:您好! 为了让您更好地理解程序,这回我在每条语句后面都加上了注解(&&后面的内容),前面和后面或中间没有注解的,要么一看就明白,要么是程序格式需要等,后面最长的那条语句,是显示运行时间的,都与计算无关。 同时还传上200内的计算结果。K=0;步长=210;初始值=19 CLEAR SELECT 1 USE D:\nabaoj\白新岭\白新岭表.DBF EXCL ALIAS 白新岭 ZAP SELECT 2 USE D:\nabaoj\随机素数表.DBF ALIAS 素数表 INPUT "请输入预先值 K= " TO yxk INPUT "请输入步长值 bcz= " TO bcz INPUT "请输入初始值 csz= " TO csz INPUT "请输入外循环起始值 xks= " TO xks INPUT "请输入外循环终结值 zds= " TO zds kssj=SECONDS() &&取出开始时间 FOR i=xks TO zds &&外循环开始 bpz=csz+(i+yxk)*bcz &&计算被判断值 Kf=INT(SQRT(bpz)) &&求出被判断值的开方根 SELECT 素数表 &&打开素数表 LOCATE FOR 素数>=kf &&根据开方根,查找最大素数 DO CASE CASE EOF() &&如果超出素数表最后一条记录 GO BOTTOM CASE 素数>kf &&如果找到的素数比开方根值大,就将记录指针退回一个,保证使用的最大素数在开方根内 SKIP -1 ENDCASE SSS=RECNO() &&记录下最大素数(开方根内)记录位置(如果找到的素数等于开方根,则直接读取这个素数的位置) GO 2 &&从第二条记录开始读取素数(3) FOR j=2 TO SSS &&内循环开始。这个循环实质上是从小到大顺序,依次读取素数。循环值是记录序号 qmz=MOD(bpz,素数) &&以读取的素数为条件,对被判断值求模 IF qmz=0 OR qmz=2 OR qmz=6 OR qmz=8 &&如果符合这四个约定条件之一,就进行相应工作.如果一个也没有符合条件的,直接使记录指针向下移动一个(SKIP) mss=素数 &&********记下使用的素数*********** SELECT 白新岭 &&打开保存求解结果的信息表 APPEND BLANK &&增加一条空记录 REPLACE 外环值 WITH i &&将外循环数值保存到外循环字段中(外循环数据栏) REPLACE 被判值 WITH bpz &&将被判断值保存到被判断值字段中(被判断值数据栏) REPLACE 开方根 WITH kf &&将开方根保存到开方根字段中(开方根值数据栏) REPLACE 素数 WITH mss &&将素数值保存到素数值字段中(素数值数据栏) REPLACE 余数 WITH qmz &&将余数值保存到余数值字段中(余数值数据栏,qmz=MOD(bpz,素数)) EXIT &&因为符合条件,则做完相应工作后跳出内循环 ENDIF SKIP &&素数表指针向下移动一个 ENDFOR ENDFOR =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示") SELECT 白新岭 BROWSE CLEAR ALL 这个是上传的 pdf 格式文件 [点击查看] 这是vfbpgyfk先生编的程序,只不过给出的结果是要排除的数据,没有显示的才是需要的数据。
发表于 2010-5-14 12:22 | 显示全部楼层

[原创]请教一个编程问题

去问申一言!它不要编程就可解决!
 楼主| 发表于 2010-5-14 12:26 | 显示全部楼层

[原创]请教一个编程问题

那,他厉害。不用枪和武器就能解决战争那多好。
发表于 2010-5-14 12:35 | 显示全部楼层

[原创]请教一个编程问题

申一言它不要编程就可解决!
 楼主| 发表于 2010-5-19 18:48 | 显示全部楼层

[原创]请教一个编程问题

这个编程问题,vfbpgyfk先生已经解决。而且进行了试运行,结果与预期相同,它能解决四胞胎素数群的数量问题。
最近我在学习编程,以便得到自己需要的数据,以验证自己给的公式是否正确,是否经得起事实的,实践的考验。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2025-7-16 08:09 , Processed in 0.088168 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表