|

楼主 |
发表于 2010-5-15 09:59
|
显示全部楼层
[原创]请教vfbpgyfk先生一个编程问题
[这个贴子最后由白新岭在 2010/05/15 10:10am 第 1 次编辑]
还有一种改良办法,你可以编程先得到初始值,扩大步长,减少运算数据,有(7-4)*(11-4)*(13-4)*(17-4)*(19-4)=3*8*9*13*15=42120,即有42120个初始值。步长为:2*3*5*7*11*13*17*19=9699690,步长将近1千万,这样100亿中,大概对每个初始值需要判断的外循环次数为:100亿/9699690=1031,总共有42120类种初始值,每种初始值需要判断1031次,总共需要判断的数据个数为:42120+1031=43425720,这样数据量就少得多了。怎么得到42120个初始值呢?这好办,方法基本上相同,用一次代数式表示所有被判断值,被判断值=19+0到n*30,9699690/30=323323,所以n=323323-1=323322,外循环次数是323323,因为程序从0开时,占了1次,所以n就比外循环次数少1.
这一的步长是30(=2*3*5)。
这里唯一不同的是,对每个被判断值来说,不是用它开方前的素数求余,而都统一用素数7,11,13,17,19这5个素数求余,还有(0,2,6,8)也对应素数(7,11,13,17,19)求余数,实际上除了7有区别外,因为预先约定的余数中8,不可能在素数7参与求余时出现,那时余数8应该有余数1代替(mod(8,7)=1,其余的一样。
也就是说,能通过这5个素数的检验就可以成为合格的初始值(含初始值的1次代数式是有可能出现四胞胎素数群的,其余的代数式不是已经被包括在其中,就是绝对不会出现四胞胎素数群的代数式)。 |
|