|

楼主 |
发表于 2010-5-10 17:17
|
显示全部楼层
[原创]请教vfbpgyfk先生一个编程问题
[这个贴子最后由白新岭在 2010/05/10 05:52pm 第 2 次编辑]
下面引用由vfbpgyfk在 2010/05/10 04:45pm 发表的内容:
白新岭:您好!
有几个事需要落实:
1、您的外循环如何定义,也就说,从“什么数值(起始值)”到“什么值(结束值)”。比如:从“1”循环到“5”,则是:1、2、3、4、5,逐个完成规定做的事。
以您的例子来说 ... 外循环是从0到n,也就是是说在本程序中一共需要被判断的数的个数,例如有100个数需要被判断,则n=99,赋值从0开始,每被判断一个数,n就增加1,即 n=n+1.被判断值是一个关于n的一次函数,被判断值=初始值+(n+k)*步长,初始值预先给定,k值预先给定,k是一个正整数,步长预先给定(但是它们需要用户每次给出确定值,包括外循环次数,即此次需要判断的数的总个数,每一个n值对应着一个被判断数。
初始值需要用户手工找到,它与步长是一个相关的值。第一参与筛选的素数也与初始值有关,不同的初始值和步长决定从某个小素数开始进行运行程序,当然也可以从第一个素数开始,从素数3开始。(这里2就不必用了,因为都是奇数,所给余数都是偶数,每个被筛选值都不会被素数条件2筛除掉)。
上边是外循环的内容。
到内循环就是针对每一个确定的n值(它不大于所给外循环次数-1),然后调取它开方前的每一个素数,对它求余,例如n=0时,被判断值=99+(0+3)*2310=7029.【这里k=3,即从第3+1个这样的数开始(当然可以从第一个这样的数开始,即从99+(0+0)*2310=99,设一个k值是为了把大量需要判断的数分批处理,例如第一次处理前1000个数据,另k=0,n=999;第二次处理1000个数据,另k=1001,n=999)】,SQRT(7029)=83.84,调取84以前的每个素数,对它求余MOD(7029,3)=0,预先给的余数中有0(0,2,6,8),所以内循环结束,对下一个n值进行判断;假设,所得余数没有在预先给的余数中出现,应继续调入下一个素数,直到调完所有素数(它根号前的素数,从这里可以看出,n值越大,被调用的素数数量就越多)。
至于余数是如何得出的,那需要用户自己提前手工完成。之所以限定最多提前给15个余数,是因为现在的计算机无法找到更大的数符合15个余数的排查,这里提前给的余数是每个参与素数对判断值的余数要比较的。 |
|