|

楼主 |
发表于 2010-5-12 16:25
|
显示全部楼层
[原创]请教vfbpgyfk先生一个编程问题
这里的4个余数(0,2,6,8)仅是素数余数中的4/Pj的比值,即占它余数类中4份,其余的余数皆符合条件,实际上是对这4个值也要进行求余的,当素数大于7时,即最小的一个素数为11时,模11大于它们4个中的任何一个,所以余数是它们本身,这样就固定死这些余数就可以了,就不必形成动态的每步也对它们求余数了。
那么,这里有了另一个问题,即素数2,3,5,7对它们的余数是多少呢?它们4个对模2求余,余数都为0,即素数2可以把余数1放掉,事先给的被判断值都是奇数,所以素数2不起作用,素数3,这4个数有两种余数,余数0和余数2,没有余数1,所以它把余数1都方行,而我们对所有奇数对3求余数只有三种可能0,1,2,余数6,8不会出现(它会出现余数0和余数2,一样被筛选掉);到了素数5,就有麻烦了,MOD(6,5)=1,余数1要被排除,不会出现余数6,同样MOD(8,5)=3,余数3要被筛除掉,根本不会出现余数8,只有余数4是可以通过的;当素数7参与时,余数8实际上是要排除余数为1的值,余数8根本不会出现。这些都是在上述编程中无法兼顾的,如果每调取一个素数都先对它们4个进行求余,势必加大运算量,还有如果起步较早,运算量也非常大,为了避开这些问题,我们可以提高初始值,跨越小素数要求余数的情况,把被判断值进行分类,以便减少计算数据数量,这样可以解决事先给的余数对每个素数求余数问题。 |
|